(Variável ruim: Linha 36) Por favor, ajude!

(Variável ruim: Linha 36) Por favor, ajude!

O que eu fiz de errado aqui? Porque quando executo meu script e o paro depois de definir a variável, ele diz que tenho uma variável incorreta

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

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 == $'\0' ]] ; then
        break
    fi
    #Backspace
    if [[ $CHAR == $'\177' ]] ; 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

Responder1

Presumo que você não esteja mostrando todo o código, assim como line 36a readdeclaração do trecho que você postou.

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

read -p "$PROMPT" -r -s -n1 CHAR
  • $PROMPTé o parâmetro para -pimprimir um '*' ou nada na entrada.
  • -ntambém precisa de um parâmetro, informando quantos caracteres devem ser lidos de uma vez.
  • A variável $CHARé usada posteriormente, mas nunca é atribuída porread

Também $PASSWORDconterá apenas o último caractere, já que você esqueceu de concatenar: PASSWORD=$CHARdeveria ser

PASSWORD+=$CHAR

ou

PASSWORD=${PASSWORD}${CHAR}

Com essas correções, o código faz o que eu acho que deveria: apresentar um prompt de senha com 'estrela'.


Solicite 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 == $'\0' ]] ; then
        break
    fi
    #Backspace
    if [[ $CHAR == $'\177' ]] ; 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 esse código (inteiramente) (?) e tem alguns problemas para entendê-lo. Não vou explicar linha por linha o que isso faz. Desculpe. Sugiro que você leia a web e volte com perguntas específicas, caso surjam. Uma boa explicação reade suas opções é, por exemplodado aqui.

Introduções gerais à programação bash podem ser encontradas, por exemplo, em

informação relacionada