%20Bitte%20helfen%20Sie!.png)
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 36
eigentlich die read
Anweisung aus dem Snippet, das Sie gepostet haben.
Die read
Aussage ist falsch. IMHO meinst du
read -p "$PROMPT" -r -s -n1 CHAR
$PROMPT
ist der Parameter für-p
, der bei der Eingabe entweder ein „*“ oder nichts ausgibt.-n
benötigt ebenfalls einen Parameter, der angibt, wie viele Zeichen auf einmal gelesen werden sollen.- Die Variable
$CHAR
wird später verwendet, aber sie wird nie zugewiesen vonread
$PASSWORD
Enthält außerdem nur das letzte Zeichen, da Sie vergessen haben, zu verketten: PASSWORD=$CHAR
sollte 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 read
und seinen Optionen ist zum Beispielhier gegeben.
Allgemeine Einführungen in die Bash-Programmierung finden Sie beispielsweise unter