[Bourne Shell]
[Pagina anterioara] [Pagina de continut] [Pagina urmatoare]

Instructiuni iterative


Instructiunea for


Sintaxa instructiunii for este:
	for <variabila> in <valoare_1> <valoare_2> <valoare_n>
do
<comenzi>
done
Exemple
  1. 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
    	
  2. 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

Instructiunea while


Sintaxa instructiunii while este:
	while <comanda_adev> 
do
<comenzi>
done
Exemplu
  1. 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
    	

Instructiunea until


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:
  1. 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


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
  1. 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
    	
  2. Ce se intampla in cazul in catre in exemplul anterior continue este inlocuit de break?
[Previous page] [Section contents page] [Next page]