Vi ska nu skriva ett program som raderar filer. Programmet ska fråga efter bekräftelse för varje fil. I programmet använder vi Bashkommandona break och continue. Det förra får Bash att hoppa till kommandot efter done i en while-konstruktion, det senare får Bash att hoppa till kommandot done (men inte förbi det). Så här ser programmet radera ut:
#!/bin/bash
while [ $# -ne 0 ] ; do
read -p "Radera $1 (j/n/s)? " SVAR
case "$SVAR" in
[Jj] | [Jj]a | JA) rm "$1" ;;
[Nn] | [Nn]ej | NEJ) ;;
[Ss]) break ;;
*) echo 'Felaktigt svar, försök igen!' ; continue ;;
esac
shift
done
Låt oss prova programmet innan vi tittar närmare på det.$ ls
Kapitel40A/ epistel2.text epistel4.text
bellman epistel3.text epistel4.text.kopia
epistel1.text epistel3.text.kopia lenngren
$ radera epistel*
Radera epistel1.text (j/n/s)? j
Radera epistel2.text (j/n/s)? nej
Radera epistel3.text (j/n/s)? nja
Felaktigt svar, försök igen!
Radera epistel3.text (j/n/s)? Ja
Radera epistel3.text.kopia (j/n/s)? ja
Radera epistel4.text (j/n/s)? s
$ ls
Kapitel40A/ epistel2.text epistel4.text.kopia
bellman epistel4.text lenngren
$ För varje fil har man tre val: att radera den,
att inte radera den samt att avsluta.
Om man skriver j
(eller J eller ja eller Ja eller JA),
så raderas filen.
Om man skriver s eller S, så
utförs kommandot break som får Bash att hoppa
till efter done varvid programmet avslutas.
Om man skriver ett ogiltigt svar, så får
kommandot continue Bash att gå tillbaka till do
utan att shift utförs, och man får då
en ny fråga om samma fil.
Man kan använda break och
continue i for-satser,
som följande exempel visar:$ cat exempel
#!/bin/bash
for i in $(seq 10 -1 1)
do
[ $i -eq 8 ] && continue
echo "Nu har 'i' värdet $i"
[ $i -eq 6 ] && break
done
$ exempel
Nu har 'i' värdet 10
Nu har 'i' värdet 9
Nu har 'i' värdet 7
Nu har 'i' värdet 6
$