(Ungültige Variable: Zeile 36) Bitte helfen Sie!

(Ungültige Variable: Zeile 36) Bitte helfen Sie!

Was habe ich hier falsch gemacht? Denn wenn ich mein Skript ausführe und es stoppe, nachdem ich die Variable festgelegt habe, wird mir gesagt, dass ich eine fehlerhafte Variable habe

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

Für Hilfe wäre ich sehr dankbar.

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

Antwort1

Ich nehme an, Sie zeigen nicht den gesamten Code, sondern line 36eigentlich die readAnweisung aus dem Snippet, das Sie gepostet haben.

Die readAussage ist falsch. IMHO meinst du

read -p "$PROMPT" -r -s -n1 CHAR
  • $PROMPTist der Parameter für -p, der bei der Eingabe entweder ein „*“ oder nichts ausgibt.
  • -nbenötigt ebenfalls einen Parameter, der angibt, wie viele Zeichen auf einmal gelesen werden sollen.
  • Die Variable $CHARwird später verwendet, aber sie wird nie zugewiesen vonread

$PASSWORDEnthält außerdem nur das letzte Zeichen, da Sie vergessen haben, zu verketten: PASSWORD=$CHARsollte eher lauten

PASSWORD+=$CHAR

oder

PASSWORD=${PASSWORD}${CHAR}

Mit diesen Korrekturen macht der Code, was er meiner Meinung nach soll: Er zeigt eine mit einem Sternchen versehene Passwortabfrage an.


Auf Anfrage hier der komplette und korrigierte Codeausschnitt

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

Deinem Kommentar nach zu urteilen, hast du diesen Code nicht (vollständig) selbst geschrieben (?) und hast einige Schwierigkeiten, ihn zu verstehen. Ich werde dir nicht Zeile für Zeile erklären, was er tut. Tut mir leid. Ich schlage vor, du liest im Internet herum und kommst mit spezifischen Fragen zurück, falls sie auftauchen. Eine gute Erklärung von readund seinen Optionen ist zum Beispielhier gegeben.

Allgemeine Einführungen in die Bash-Programmierung finden Sie beispielsweise unter

verwandte Informationen