2013-10-22 4 views
10

Quindi qualcuno mi ha mostrato come utilizzare le condizioni per verificare se un utente ha digitato input per una password. Voglio fare un esempio del loro esempio e usare un ciclo (almeno quello che penso sia il mio richiamo).Fino a quando l'input dell'utente equivale a qualcosa da fare

Ecco il loro esempio:

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

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

invece di uscire il copione lo voglio continuare a chiedere per l'ingresso fino a quando v'è una certa.

Voglio fare una dichiarazione come questo, ma stavo facendo sbagliato: (Ora, usando ad esempio in alto)

utente è data la possibilità di inserire la nuova password e compilare il valore della variabile.

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

La porzione successiva controlla la variabile per vedere se contiene un valore, mentre il valore è nullo esso richiedere all'utente di riempire il valore indefinitamente. (a loop)

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

Questa riga cerca un file contenente un insieme di variabili utilizzate da un altro file. Poi cerca il file per una riga contenente pass =. * (. * Significa nulla) allora scrive PASSA = $ newpass ($ newpass essendo variabile)

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

Grazie per tutto l'aiuto, ho intenzione di usa questo e impara da esso.

risposta

19

Questo ciclo while dovrebbe funzionare:

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

Potrebbe abbattere la tua risposta e spiegare? Prendo praticamente il jist, voglio solo capirlo completamente. – Geofferey

+3

Sì, certo. '-z string' significa se la stringa è vuota e' mentre [[-z "$ NEWPASS"]] 'significa eseguire questo ciclo while finché' $ NEWPASS' è vuoto. Il tuo normale comando di lettura arriva all'interno del ciclo. Se l'utente preme, allora '$ NEWPASS' è ancora vuoto e viene visualizzato di nuovo il prompt. L'utente di momento inserisce un valore mentre il ciclo termina poiché '$ NEWPASS' diventa non vuoto. Esegui 'man test' per altro. – anubhava

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

Potresti abbattere la tua risposta e spiegare? – Geofferey

+0

Certo, se 'read' ha esito positivo, quindi il test viene valutato, se la stringa è vuota, il loop continua, in caso contrario - il ciclo termina. –