(Bad Variable: Line 36) Por favor, ajude!

0

O que eu fiz de errado aqui ?, porque quando eu corro meu script e paro depois de definir a variável, ele diz que eu tenho uma variável ruim

qmail.script: 36: read: : bad variable name. 

A ajuda seria muito apreciada.

unset PASSWORD
unset CHARCOUNT
echo
echo -n "Please Enter a Password For VqAdmin, Roundcube and QmailAdmin.
Password: "
stty echo
CHARCOUNT=0
while IFS= read "$PROMPT" -p -r -s -n 
do
    #Enter - accept password
    if [[ $CHAR == $'
qmail.script: 36: read: : bad variable name. 
' ]] ; then break fi #Backspace if [[ $CHAR == $'7' ]] ; then if [ $CHARCOUNT -gt 0 ] ; then CHARCOUNT=$((CHARCOUNT-1)) PROMPT=$'\b \b' PASSWORD="${PASSWORD%?}" else PROMPT='' fi else CHARCOUNT=$((CHARCOUNT+1)) PROMPT='*' PASSWORD=$CHAR fi done stty echo
    
por Tony 11.10.2015 / 05:05

1 resposta

4

Suponho que você não esteja mostrando todo o código, então line 36 é realmente a declaração read do snippet que você postou.

A declaração read está errada. IMHO você quer dizer

read -p "$PROMPT" -r -s -n1 CHAR
  • $PROMPT é o parâmetro para -p , imprimindo um '*' ou nada na entrada.
  • -n também precisa de um parâmetro, informando quantos caracteres ler de uma vez.
  • A variável $CHAR é usada mais tarde, mas nunca é atribuída por read

Além disso, $PASSWORD conterá apenas o último caractere, já que você se esqueceu de concatenar: PASSWORD=$CHAR deve ser

PASSWORD+=$CHAR

ou

PASSWORD=${PASSWORD}${CHAR}

Com essas correções, o código faz o que eu acho que deve: Apresentar um prompt de senha 'estrelado'.

A pedido, aqui, o trecho de código completo e corrigido
unset PASSWORD
unset CHARCOUNT
echo
echo -n "Please Enter a Password For VqAdmin, Roundcube and QmailAdmin.
Password: "
stty echo
CHARCOUNT=0
while IFS= read -p "$PROMPT" -r -s -n1 CHAR 
do
    #Enter - accept password
    if [[ $CHAR == $'
read -p "$PROMPT" -r -s -n1 CHAR
' ]] ; then break fi #Backspace if [[ $CHAR == $'7' ]] ; then if [ $CHARCOUNT -gt 0 ] ; then CHARCOUNT=$((CHARCOUNT-1)) PROMPT=$'\b \b' PASSWORD="${PASSWORD%?}" else PROMPT='' fi else CHARCOUNT=$((CHARCOUNT+1)) PROMPT='*' PASSWORD+=$CHAR fi done

A julgar pelo seu comentário, você não escreveu este código sozinho (completamente) (?) e tem algum problema em entendê-lo. Não vou explicar para você, linha por linha, o que faz. Desculpa. Eu sugiro que você leia em toda a web e volte com perguntas específicas, caso elas apareçam. Uma boa explicação de read e suas opções é, por exemplo, dada aqui .

Introdução geral à programação bash pode ser encontrada, por exemplo, em

por Nephente 11.10.2015 / 08:16