(Неверная переменная: строка 36) Пожалуйста, помогите!

Что я здесь сделал не так ?, потому что когда я запускаю свой скрипт и останавливаю его после того, как я установил переменную, он говорит, что у меня плохая переменная

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
0
задан 11 October 2015 в 06:07

1 ответ

Я беру его, Вы не показываете весь код, таким образом, 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 и это - опции, например, дан здесь.

Общие введения для избиения программирования могут быть найдены, например, в

4
ответ дан 11 October 2015 в 16:07
  • 1
    спасибо, но Все еще дают мне язык настройки клавиатуры – Abdo Driowya 31 December 2016 в 00:49

Другие вопросы по тегам:

Похожие вопросы: