Articles

Jurnalul Geek

există de multe ori într-un script shell atunci când doriți să executați în mod repetat o declarație sau un grup de declarații până când apare o anumită condiție specificată. În plus, poate doriți să executați un grup de instrucțiuni pentru fiecare element dintr-o anumită listă. Shell-ul oferă trei constructe looping pentru aceste situații: pentru, în timp ce, și până la constructe.

bucla for vă permite să specificați o listă de valori. Un grup de declarații este executat pentru fiecare valoare din listă.

pentru sintaxa buclei

bucla for din shell ia o listă de cuvinte (șiruri) ca argument. Numărul de cuvinte din listă determină de câte ori sunt executate declarațiile din bucla for. Sintaxa pentru bucla for Este:

for variable in element1 element2 element3 do commands done

unde:

  • variabilă: este orice nume de variabilă.
  • elements (argument_list): poate fi orice listă de cuvinte, șiruri sau numere și poate fi literală sau generată folosind o comandă shell sau metacaracterul liniei de comandă shell.
  • comenzi: Comenzile pot fi orice comenzi ale sistemului de Operare, un program de utilizator, un script shell sau o declarație shell care returnează (produce) o listă.

valoarea variabilei var este setată la primul cuvânt din listă prima dată prin buclă. A doua oară prin buclă, valoarea sa este setată la al doilea cuvânt din listă și așa mai departe. Bucla se termină atunci când var a preluat fiecare dintre valorile din lista argumentelor, la rândul său, și nu există argumente rămase.

lista argumentelor pentru buclă

lista argumentelor dintr-o buclă pentru poate fi orice listă de cuvinte, șiruri sau numere. Generați lista de argumente utilizând oricare dintre următoarele metode (sau combinații de metode):

  • utilizați o listă explicită
  • utilizați conținutul unei variabile
  • utilizați argumentele din linia de comandă
  • utilizați substituția comenzii
  • utilizați nume de fișiere în substituția comenzii

Exemplul 1 : Pentru Buclă utilizând o listă explicită pentru a specifica argumentele

când argumentele sunt listate pentru o buclă, acestea sunt numite. O listă explicită este cea mai simplă formă a unei liste de argumente. Bucla este executată o dată pentru fiecare element de listă. Următorul exemplu este un for loop folosind o listă explicită de elemente:

#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done

rezultatul acestui lucru pentru loop este:

Value of fruit is: apple Value of fruit is: orange Value of fruit is: banana Value of fruit is: peach Value of fruit is: kiwi

Exemplul 2 : pentru loop folosind conținut variabil pentru a specifica argumente

atunci când argumentele sunt variabila și instrucțiunea este executată, conținutul variabilei este înlocuit. În exemplul următor, textul introdus la prompt devine valoarea intrării variabilei. Această variabilă reprezintă lista argumentelor pentru construct. Prin urmare, textul în intrare este împărțit în cuvinte sau jetoane bazate pe spațiu alb.

$ cat ex1.sh #!/bin/bash# Script name: ex1.shecho "Enter some text: \c" read INPUTfor var in $INPUT do echo "var contains: $var"done

$ ./ex1.shEnter some text: I like the Bash shell. var contains: Ivar contains: likevar contains: thevar contains: Kornvar contains: shell.

Exemplul 3 : pentru bucla care utilizează argumente din linia de comandă pentru a specifica argumente

în exemplul următor, textul introdus în linia de comandă devine lista de argumente a construcției for. Prin urmare, textul liniei de comandă este împărțit în cuvinte sau jetoane pe baza spațiului alb.

$ cat ex2.sh#!/bin/bash# Script name: ex2.shfor var in $* do echo "command line contains: $var"done

$ ./ex2.sh I am The Geek.command line contains: Icommand line contains: amcommand line contains: Thecommand line contains: Geek.

Exemplul 4 : Pentru bucla care utilizează substituția de comandă pentru a specifica argumentele

sintaxa pentru substituția de comandă într-un shell Bash este:

for var in `cmd_sub`

următorul exemplu folosește ieșirea comenzii cat ca listă de argumente.

$ cat fruit1 apple orange banana peachkiwi

$ cat ex4.sh #!/bin/bash# Script name: ex4.shfor var in `cat fruit2` do echo "var contains: $var"done

$ ./ex4.shvar contains: Apple var contains: Orange var contains: Banana var contains: Peach var contains: Kiwi

Dacă fișierul care conține lista era în următorul format, care este rezultatul buclei for.

$ cat fruit3Apple Orange Banana Peach Kiwi

$ cat ex5.sh #!/bin/bash# Script name: ex5.shfor var in `cat fruit3` do echo "$var"done

$ ./ex5.shApple Orange Banana Peach Kiwi

în exemplul de mai sus, rezultatele nu se modifică. Variabila IFS este orice spațiu alb, deci atât un retur de transport, cât și un spațiu sau o filă separă fiecare câmp din fișier.

exemplul 5 : pentru bucla care utilizează nume de fișiere în substituția comenzii pentru a specifica argumentele

unele comenzi furnizează nume de fișiere și nume de directoare ca ieșire. În exemplul următor, shell-ul înlocuiește ieșirea comenzii, LS/etc/p*(/etc/passwd/etc / profilși așa mai departe), ca listă de argumente pentru bucla for.

$ cat ex7.sh #!/bin/bash# Script name: ex7.shfor var in `ls /etc/p*`do print "var contains: $var"done

# ./x.sh var contains: /etc/passwdvar contains: /etc/passwd-var contains: /etc/printcapvar contains: /etc/profile....