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

(Неверная переменная: строка 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

решение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и его опции, например,дано здесь.

Общие сведения о программировании на языке bash можно найти, например, по адресу

Связанный контент