%20Por%20favor%2C%20ajude!.png)
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 36
a read
declaração do trecho que você postou.
A read
afirmação está errada. IMHO você quer dizer
read -p "$PROMPT" -r -s -n1 CHAR
$PROMPT
é o parâmetro para-p
imprimir um '*' ou nada na entrada.-n
també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 $PASSWORD
conterá apenas o último caractere, já que você esqueceu de concatenar: PASSWORD=$CHAR
deveria 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 read
e suas opções é, por exemplodado aqui.
Introduções gerais à programação bash podem ser encontradas, por exemplo, em