Articles

The Geek Diary

w skrypcie powłoki jest wiele razy, gdy chcesz wielokrotnie wykonać polecenie lub grupę instrukcji, dopóki nie wystąpi określony warunek. Ponadto możesz chcieć wykonać grupę instrukcji dla każdego elementu z określonej listy. Powłoka zapewnia trzy zapętlone konstrukty dla tych sytuacji: konstrukty for, while I until.

pętla for pozwala określić listę wartości. Dla każdej wartości na liście jest wykonywana Grupa poleceń.

składnia pętli For

pętla for w powłoce przyjmuje listę słów (łańcuchów) jako argument. Ilość słów na liście określa ilość razy wykonywane są polecenia w pętli for. Składnia pętli for jest następująca:

for variable in element1 element2 element3 do commands done

gdzie:

  • zmienna: jest dowolną nazwą zmiennej.
  • elements (argument_list): może to być dowolna lista słów, łańcuchów lub liczb i może być dosłowna lub wygenerowana za pomocą polecenia powłoki lub metaznacznika linii poleceń powłoki.
  • polecenia: Polecenia mogą być dowolnymi poleceniami systemu operacyjnego, programem użytkownika, skryptem powłoki lub instrukcją powłoki, która zwraca (tworzy) listę.

wartość zmiennej var jest ustawiana na pierwsze słowo na liście za pierwszym razem przez pętlę. Za drugim razem przez pętlę, jej wartość jest ustawiana na drugie słowo na liście, i tak dalej. Pętla kończy się, gdy var przyjmie każdą z wartości z listy argumentów i nie ma żadnych pozostałych argumentów.

lista argumentów pętli for

lista argumentów w pętli For może być dowolną listą słów, łańcuchów lub liczb. Generowanie listy argumentów za pomocą jednej z następujących metod (lub ich kombinacji):

  • użyj jawnej listy
  • użyj zawartości zmiennej
  • użyj argumentów wiersza poleceń
  • użyj podstawienia polecenia
  • użyj nazw plików w podstawieniu polecenia

przykład 1 : pętla For używanie jawnej listy do określania argumentów

gdy argumenty są wyświetlane dla pętli for, są one nazywane jawną listą. Lista jawna jest najprostszą formą listy argumentów. Pętla jest wykonywana raz dla każdego elementu listy. Poniższy przykład to pętla for używająca jawnej listy elementów:

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

wyjście z tej pętli for to:

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

przykład 2 : pętla for używająca zawartości zmiennej do określania argumentów

, gdy argumenty są w zmienna i instrukcja jest wykonywana, zawartość zmiennej jest podstawiana. W poniższym przykładzie tekst wprowadzony w znaku zachęty staje się wartością zmiennej INPUT. Zmienna ta przedstawia listę argumentów konstrukcji for. Dlatego tekst we wprowadzaniu jest podzielony na słowa lub tokeny na podstawie spacji.

$ 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.

przykład 3 : pętla For używając argumentów wiersza poleceń do określenia argumentów

w poniższym przykładzie tekst wprowadzony w wierszu poleceń staje się listą argumentów konstrukcji for. Dlatego tekst wiersza poleceń jest podzielony na słowa lub tokeny na podstawie spacji.

$ 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.

przykład 4 : Dla pętli używającej polecenia Substitution do podawania argumentów

składnia dla polecenia substitution w powłoce Bash to:

for var in `cmd_sub`

poniższy przykład wykorzystuje wyjście polecenia cat jako listę argumentów.

$ 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

Jeśli plik zawierający listę był w następującym formacie, jaki jest wynik pętli 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

w powyższym przykładzie wyniki nie ulegają zmianie. Zmienna IFS to dowolna Biała spacja, więc zarówno powrót karetki, jak i spacja lub tabulacja oddzielają każde pole w pliku.

przykład 5 : for loop używanie nazw plików w podstawianiu poleceń do podawania argumentów

niektóre polecenia dostarczają nazwy plików i nazw katalogów jako ich wyjście. W poniższym przykładzie powłoka zastępuje wyjście polecenia, ls/etc / p*(/etc / passwd/etc / profilei tak dalej), jako listę argumentów pętli 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....