Articles

Geek Deník

Existuje mnoho časy v shellu skript, když chcete opakovaně provést příkaz nebo skupinu příkazů, dokud nějaký zadaný stav nastane. Kromě toho můžete chtít provést skupinu příkazů pro každý prvek v určitém seznamu. Shell poskytuje tři smyčkové konstrukce pro tyto situace: konstrukty pro, Zatímco a do.

smyčka for umožňuje zadat seznam hodnot. Pro každou hodnotu v seznamu se provede skupina příkazů.

pro syntaxi smyčky

smyčka for V shellu bere jako argument seznam slov (řetězců). Počet slov v seznamu určuje, kolikrát jsou příkazy ve smyčce for provedeny. Syntaxe cyklu for je:

for variable in element1 element2 element3 do commands done

kde:

  • proměnná: je To jakýkoli název proměnné.
  • elements (argument_list): může to být libovolný seznam slov, řetězců nebo čísel a může být doslovný nebo generovaný pomocí příkazu shell nebo metacharacter příkazového řádku.
  • příkazy: Příkazy mohou být libovolné příkazy operačního systému, uživatelský program, skript shellu nebo příkaz shellu, který vrací (produkuje) seznam.

hodnota proměnné Var je nastavena na první slovo v seznamu poprvé smyčkou. Podruhé přes smyčku je jeho hodnota nastavena na druhé slovo v seznamu a tak dále. Smyčka se ukončí, když var převezme každou z hodnot ze seznamu argumentů a neexistují žádné zbývající argumenty.

seznam argumentů pro smyčku

seznam argumentů ve smyčce pro může být libovolný seznam slov, řetězců nebo čísel. Generování seznamu argumentů pomocí některé z následujících metod (nebo kombinace metod):

  • Použití explicitní seznam
  • Použít obsah proměnné
  • Používat argumenty příkazového řádku
  • Použijte příkaz substituce
  • Používat názvy souborů v příkazu, substituce

Příklad 1 : Pro smyčky pomocí Explicitního Seznamu lze Zadat Argumenty

Když argumenty jsou uvedeny na pro smyčky, se nazývají explicitní seznam. Explicitní seznam je nejjednodušší forma seznamu argumentů. Smyčka se provádí jednou pro každý prvek seznamu. Následující příklad je pro smyčce pomocí explicitní seznam prvků:

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

výstup z této smyčky for je:

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

Příklad 2 : Pro smyčky pomocí Proměnné Obsah Specifikovat Argumenty

Když argumenty jsou v proměnné a příkaz se provede, obsah proměnné jsou nahrazeny. V následujícím příkladu se text zadaný na výzvu stává hodnotou vstupu proměnné. Tato proměnná představuje seznam argumentů konstruktu for. Proto je text ve vstupu rozdělen na slova nebo tokeny na základě prázdného místa.

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

Příklad 3 : Pro smyčce pomocí Argumentů Příkazového Řádku Zadat Argumenty

V následujícím příkladu, text zadaný na příkazovém řádku se stává argument seznam pro konstrukt. Proto je text příkazového řádku rozdělen na slova nebo tokeny na základě prázdného místa.

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

Příklad 4 : Pro smyčku Pomocí Příkazu Substituce Zadat Argumenty

syntaxe pro příkaz substituce v Bash shellu je:

for var in `cmd_sub`

následující příklad používá výstup příkaz cat jako argument, seznam.

$ 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

Pokud se soubor obsahující seznam v následujícím formátu, jaký je výsledek pro smyčce.

$ 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

Ve výše uvedeném příkladu, výsledky se nemění. Proměnná IFS je libovolné prázdné místo, takže jak návrat vozíku, tak mezera nebo karta oddělují každé pole v souboru.

příklad 5: pro smyčku používající názvy souborů při nahrazení příkazu k zadání argumentů

některé příkazy poskytují jako výstup názvy souborů a názvy adresářů. V následujícím příkladu shell nahrazuje výstup příkazu ls / etc/p*(/etc/passwd/etc / profilea tak dále) jako seznam argumentů pro smyčku 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....