Что я здесь сделал не так ?, потому что когда я запускаю свой скрипт и останавливаю его после того, как я установил переменную, он говорит, что у меня плохая переменная
qmail.script: 36: read: : bad variable name.
Помощь будет очень полезна.
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
Я беру его, Вы не показываете весь код, таким образом, line 36
действительно read
оператор от отрывка Вы отправили.
read
оператор является неправильным. По моему скромному мнению, Вы имеете в виду
read -p "$PROMPT" -r -s -n1 CHAR
$PROMPT
параметр для -p
, или печать '*' или ничто во входе.-n
нуждается в параметре также, говоря сколько символов читать сразу.$CHAR
используется позже, но этому никогда не присваивают read
Также $PASSWORD
будет содержать только последний знак, так как Вы забыли конкатенировать: PASSWORD=$CHAR
должен скорее быть
PASSWORD+=$CHAR
или
PASSWORD=${PASSWORD}${CHAR}
С этим исправления код делает то, что я думаю, что он, как предполагается: Представьте 'звездообразную' подсказку пароля.
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
Судя по Вашему комментарию, Вы не написали этот код сами (полностью)(?) и испытали некоторые затруднения при понимании этого. Я не объясню Вам линию за линией, что это делает.Прошу прощения. Я предполагаю, что Вы читаете вокруг сети и возвращаетесь с, конкретные вопросы должны они возникать. Хорошее объяснение read
и это - опции, например, дан здесь.
Общие введения для избиения программирования могут быть найдены, например, в