2013-10-22 7 views
10

So zeigte mir jemand, wie man Bedingung (en) verwendet, um zu testen, ob ein Benutzer Eingabe für ein Kennwort eingegeben hatte. Ich möchte ihr Beispiel einen Schritt weiter gehen und eine Schleife (zumindest das ist, was ich denke, es ist Anruf).Bis Benutzereingaben gleich sind, tun Sie

Hier ist ihr Beispiel:

read -s -p "Enter new password: " NEWPASS 

if test "$NEWPASS" = ""; then 
    echo "Password CAN NOT be blank re-run sshd_config" 
    exit 1; 
fi 

Anstatt das Skript des Verlassens ich will es für die Eingabe zu fragen halten, bis es etwas ist.

Ich mag eine Aussage wie diese macht, aber ich war es falsch zu machen: (jetzt oben am Beispiel)

Der Benutzer gegeben ist eine Chance, neues Passwort einzugeben und den Variablenwert zu füllen.

read -s -p "Enter new password:" NEWPASS 
echo "" 

Der nächste Teil überprüft die Variable zu sehen, ob er einen Wert enthält, während der Wert null ist es, den Benutzer anfordern, auf unbestimmte Zeit den Wert zu füllen. (eine Schleife)

while [[ -z "$NEWPASS" ]]; do 
echo "" 
echo "Password CAN NOT be blank" 
echo "" 
read -s -p "Enter new password:" NEWPASS; 
echo "" 
done 

Diese Zeile durchsucht eine Datei, die eine Gruppe von Variablen enthält, die von einer anderen Datei verwendet werden. Er sucht dann die Datei nach einer Zeile PASS enthalten =. * (. * Alles bedeutet), dann PASS = $ newpass ($ newpass variabel)

sed -i -e"s/^PASS=.*/PASS=$NEWPASS/" /etc/sshd.conf 

Vielen Dank für all die Hilfe schreibt, ich werde Nutze das und lerne daraus.

Antwort

19

sollten Diese while-Schleife arbeiten:

while [[ -z "$NEWPASS" ]] 
do 
    read -s -p "Enter new password: " NEWPASS 
done 
+1

Können Sie Ihre Antwort brechen und erklären? Ich bekomme den Jist ziemlich gut, ich will es nur ganz verstehen. – Geofferey

+3

Ja sicher. '-z string' bedeutet, wenn string leer ist und while [[-z" $ NEWPASS "]]' bedeutet, dass diese while-Schleife solange ausgeführt wird, bis '$ NEWPASS' leer ist. Ihr regulärer Lesebefehl kommt innerhalb der while-Schleife. Wenn der Benutzer die Eingabetaste drückt, ist '$ NEWPASS' immer noch leer und die Eingabeaufforderung wird erneut angezeigt. Der Momentbenutzer gibt einen Wert ein, während die Schleife endet, da $ NEWPASS nicht leer wird. Führen Sie "Man Test" für mehr. – anubhava

3
while read -s -p 'Enter new password: ' NEWPASS && [[ -z "$NEWPASS" ]] ; do 
echo "No-no, please, no blank passwords!" 
done 
+0

Können Sie Ihre Antwort aufschlüsseln und erklären? – Geofferey

+0

Sicher, wenn 'lesen' erfolgreich ist, dann wird der Test ausgewertet, wenn der String leer ist, wird die Schleife fortgesetzt, wenn nicht, wird die Schleife beendet. –

Verwandte Themen