<Precedenti | Contenuti | Succ.>
Uscire da un ciclo
bash fornisce due comandi incorporati che possono essere usati per controllare il flusso del programma all'interno dei loop. Il comando break termina immediatamente un ciclo e il controllo del programma riprende con l'istruzione successiva che segue il ciclo. Il comando continue fa sì che il resto del ciclo venga saltato e il controllo del programma riprende con la successiva iterazione del ciclo. Qui vediamo una versione del programma while-menu che incorpora sia break che continue:
#! / Bin / bash
# while-menu2: un programma di informazioni di sistema guidato da menu DELAY=3 # Numero di secondi per visualizzare i risultati
mentre vero; fare
pulire campo
gatto <<- _EOF_
Si prega di selezionare:
1. Visualizza le informazioni di sistema
2. Visualizza spazio su disco
3. Visualizza l'utilizzo dello spazio domestico
0. Esci
_EOF_
leggi -p "Inserisci selezione [0-3] > "
if [[ $REPLY =~ ^[0-3]$ ]]; allora if [[ $REPLY == 1 ]]; poi
echo "Hostname: $HOSTNAME" uptime
dormi $RITARDO
continua
fi
if [[ $REPLY == 2 ]]; quindi df -h
dormi $RITARDO
continua
fi
if [[ $REPLY == 3 ]]; poi
if [[ $(id -u) -eq 0 ]]; poi
echo "Utilizzo spazio domestico (tutti gli utenti)" du -sh /home/*
altro
#! / Bin / bash
# while-menu2: un programma di informazioni di sistema guidato da menu DELAY=3 # Numero di secondi per visualizzare i risultati
mentre vero; fare
pulire campo
gatto <<- _EOF_
Si prega di selezionare:
1. Visualizza le informazioni di sistema
2. Visualizza spazio su disco
3. Visualizza l'utilizzo dello spazio domestico
0. Esci
_EOF_
leggi -p "Inserisci selezione [0-3] > "
if [[ $REPLY =~ ^[0-3]$ ]]; allora if [[ $REPLY == 1 ]]; poi
echo "Hostname: $HOSTNAME" uptime
dormi $RITARDO
continua
fi
if [[ $REPLY == 2 ]]; quindi df -h
dormi $RITARDO
continua
fi
if [[ $REPLY == 3 ]]; poi
if [[ $(id -u) -eq 0 ]]; poi
echo "Utilizzo spazio domestico (tutti gli utenti)" du -sh /home/*
altro
echo "Utilizzo dello spazio domestico ($USER)" du -sh $HOME
fi
dormi $RITARDO
continua
fi
if [[ $REPLY == 0 ]]; poi rompere
fi
altro
echo "Voce non valida." dormi $RITARDO
fi fatto
echo "Programma terminato."
echo "Utilizzo dello spazio domestico ($USER)" du -sh $HOME
fi
dormi $RITARDO
continua
fi
if [[ $REPLY == 0 ]]; poi rompere
fi
altro
echo "Voce non valida." dormi $RITARDO
fi fatto
echo "Programma terminato."
In questa versione dello script, abbiamo impostato un ciclo infinito (uno che non termina mai da solo) utilizzando il vero comando per fornire uno stato di uscita a while. Da vero uscirà sempre con uno stato di uscita pari a zero, il ciclo non finirà mai. Questa è una tecnica di scripting sorprendentemente comune. Poiché il ciclo non finirà mai da solo, sta al programmatore fornire un modo per uscire dal ciclo quando sarà il momento giusto. In questo script, il rompere Il comando viene utilizzato per uscire dal ciclo quando viene scelta la selezione "0". Il Continua comando è stato incluso alla fine delle altre scelte di script per consentire un'esecuzione più efficiente. Usando continua, lo script ignorerà il codice non necessario quando viene identificata una selezione. Ad esempio, se viene scelta e identificata la selezione "1", non c'è motivo di testare le altre selezioni.