Instructiuni iterative
Sintaxa instructiunii for este:
for <variabila> in <valoare_1> <valoare_2> <valoare_n>
do
<comenzi>
done
Exemple
- Secventa urmatoare de program copiaza fisierele cu numele fis1, fis2 si fis3 in directorul
backupdir din directorul curent:
for f in fis1 fis2 fis3
do
cp $f backupdir
done
- Comanda for poate fi folosita pentru ciclarea printre elementele continute de variabila
speciala $*. Secventa urmatoare afiseaza argumentele cu care este apelat shell script-ul (presupunem ca il denumim
afisare_arg).
for argum in $*
do
echo "$argum"
done
Sintaxa instructiunii while este:
while <comanda_adev>
do
<comenzi>
done
Exemplu
- Secventa urmatoare de program citeste o optiune si executa comenzile specificate
atata timp cat variabila final are valoarea "n"
final=n
while [ "$final" = n ]
do
read optiune
case "$optiune" in
1) echo "Introduceti numele fisierului ce va fi afisat:"
read nf
cat "$nf";;
2) echo "Introduceti numele fisierului ce va fi sters:"
read nf
rm "$nf";;
3) fin=y
echo "Iesire din program..."
sleep 5;;
*) echo "Optiune invalida!";;
esac
done
Sintaxa instructiunii until este:
until <comanda_adev>
do
<comenzi>
done
De regula until se foloseste atunci cand trebuie executata o secventa de instructiuni pana
in momentul in care o comanda se termina cu valoarea de adevar zero (true).
Exemplu:
- Fie secventa urmatoare de program care verifica daca un utilizator al carui nume este
specificat drept argument in momentul apelului shell script-ului s-a conectat la sistem. In acest moment se
afiseaza mesajul : "Utilizatorul <nume_utilizator> s-a conectat!"
nume=$1
until who | grep "^$nume" > /dev/null
do
sleep 30
done
echo "Utilizatorul $1 s-a conectat!"
Comanda grep cauta un sablon specificat (in cazul nostru numele utilizatorului) intr-un fisier.
Metacaracterul "^" specifica faptul ca sablonul se potriveste cu iesirea comenzii who
doar daca este gasit la inceputul liniei (stiind faptul ca who afiseaza la inceputul fiecarei linii numele
utilizatorilor conectati la sistem in momentul respectiv). Deoarece iesirea comenzii grep nu este folosita
in nici un fel, ea este redirectata spre /dev/null.
Instructiunea sleep determina oprirea temporara a executiei programului pentru un interval de 30 de secunde;
cu alte cuvinte, verificarea conectarii utilizatorului se face la intervale de 30 de secunde. Daca shell script-ul
este denumit lookout, atunci el poate fi apelat in background folosindu-se sintaxa:
$lookout <nume_utilizator>&
iar mesajul de conectare va aparea in momentul in care utilizatorul se conecteaza la sistem si este "descoperit" de
comanda lookout.
Instructiunile break si continue sunt instructiuni de salt, fiind folosite
in mod asemanator ca instructiunile omonime din limbajul C. Astfel, instructiunea break determina iesirea din cel mai
interior ciclu ce o contine si continuand cu executia primei comenzi dupa ciclul respectiv,
iar instructiunea continue determina saltul la inceputul ciclului ce o contine.
Exemple
- Secventa urmatoare de program citeste valoarea unui an care trebuie sa fie cuprinsa intre
1900 si 2000 iar daca nu se introduce nici o valoare se reia introducerea anului.
valid=n
until [ "$valid" = y ]
do
echo "Introduceti anul (in intervalul 1900-2000) si tastati <ENTER>"
read an
if [ "$an" = "" ]
then
continue
fi
if [ "$an" -lt 1900 -o "$an" -gt 2000 ]
then
echo "\n Anul trebuie sa fie in intervalul 1900-2000"
else
valid=y
fi
done
- Ce se intampla in cazul in catre in exemplul anterior continue este inlocuit de break?
|