Android

Bash para sa loop

15 Bash For Loop Examples for Linux / Unix / OS X Shell Scripting

15 Bash For Loop Examples for Linux / Unix / OS X Shell Scripting

Talaan ng mga Nilalaman:

Anonim

Ang mga loop ay isa sa mga pangunahing konsepto ng mga wika sa programming. Madaling magamit ang mga loop kung nais mong magpatakbo ng isang serye ng mga utos nang paulit-ulit hanggang sa maabot ang isang tiyak na kondisyon.

Sa mga wika ng script tulad ng Bash, ang mga loop ay kapaki-pakinabang para sa pag-automate ng paulit-ulit na mga gawain.

Mayroong tatlong pangunahing mga konstruksyon ng loop sa script ng Bash, para sa loop, habang loop, at hanggang sa loop.

Sa tutorial na ito, tatakpan namin ang mga pangunahing kaalaman ng mga loop sa Bash. Ipapakita rin namin sa iyo kung paano gamitin ang pahinga at magpatuloy ng mga pahayag upang baguhin ang daloy ng isang loop.

Ang Standard Bash Para sa Loop

Ang para sa mga iterates ng loop sa isang listahan ng mga item at gumaganap ng ibinigay na hanay ng mga utos.

Ang Bash para sa loop ay tumatagal ng sumusunod na form:

for item in do done

Ang listahan ay maaaring isang serye ng mga string na pinaghiwalay ng mga puwang, isang hanay ng mga numero, output ng isang utos, isang array, at iba pa.

I-Loop ang mga string

Sa halimbawa sa ibaba ng loop ay umulit sa bawat item sa listahan ng mga string, at ang variable na element ay itatakda sa kasalukuyang item.

for element in Hydrogen Helium Lithium Beryllium do echo "Element: $element" done

Ang loop ay gagawa ng sumusunod na output:

Element: Hydrogen Element: Helium Element: Lithium Element: Beryllium

Loop sa isang saklaw ng numero

Maaari mong gamitin ang pagkakasunud-sunod na expression upang tukuyin ang isang hanay ng mga numero o character sa pamamagitan ng pagtukoy ng isang panimula at pagtatapos ng saklaw. Ang pagkakasunud-sunod ng expression ay tumatagal ng sumusunod na form:

{START..END}

Sa halimbawa sa ibaba ng loop ay umulit sa lahat ng mga numero mula 0 hanggang 3.

for i in {0..3} do echo "Number: $i" done

Number: 0 Number: 1 Number: 2 Number: 3

Simula sa Bash 4, posible na tukuyin ang isang pagtaas kapag gumagamit ng mga saklaw. Ang expression ay tumatagal ng sumusunod na form:

{START..END..INCREMENT}

for i in {0..20..5} do echo "Number: $i" done

Number: 0 Number: 5 Number: 10 Number: 15 Number: 20

Mag-load ng mga elemento ng array

Maaari mo ring gamitin ang para sa loop upang umulit sa isang hanay ng mga elemento:

Sa halimbawa sa ibaba, tinukoy namin ang isang hanay ng mga BOOKS at iterating sa bawat elemento ng array.

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby') for book in "${BOOKS}"; do echo "Book: $book" done

Book: In Search of Lost Time Book: Don Quixote Book: Ulysses Book: The Great Gatsby

Ang C-style Bash para sa loop

Ang syntax ng C-style para sa loop ay kumukuha ng sumusunod na form:

for ((INITIALIZATION; TEST; STEP)) do done

Ang bahagi ng INITIALIZATION ay isinasagawa lamang isang beses kapag nagsimula ang loop. Pagkatapos, nasuri ang bahaging TEST . Kung ito ay mali ang para sa loop ay natatapos. Kung totoo ang TEST , ang mga utos sa loob ng katawan ng para sa loop ay naisakatuparan at ang bahagi ng STEP ay na-update.

Sa sumusunod na code, ang mga bituin ng loop sa pamamagitan ng pag-uumpisa sa i = 0 , pagkatapos bago suriin ang bawat pag-ulit kung i ≤ 10 . i ≤ 10 . Kung totoo ay nag-print ito ng kasalukuyang halaga ng i at i ng 1 ( i++ ) kung hindi man magtatapos ang loop.

for ((i = 0; i <= 1000; i++)); do echo "Counter: $i" done

Ang loop ay magpapagaan ng 1001 beses at makagawa ng mga sumusunod na output:

Counter: 0 Counter: 1 Counter: 2… Counter: 998 Counter: 999 Counter: 1000

Break at Magpatuloy na Mga Pahayag

Ang break at magpatuloy na mga pahayag ay maaaring magamit upang makontrol ang para sa pagpapatupad ng loop.

Pahayag ng Break

Tinatapos ng pahayag ng break ang kasalukuyang loop at ipinapasa ang control ng programa sa pahayag na sumusunod sa natapos na pahayag. Karaniwang ginagamit ito upang wakasan ang loop kapag natagpuan ang isang tiyak na kondisyon.

Sa sumusunod na halimbawa, ginagamit namin ang kung ang pahayag upang wakasan ang pagpapatupad ng loop sa sandaling ang kasalukuyang iterated item ay katumbas ng 'Lithium'.

for element in Hydrogen Helium Lithium Beryllium; do if]; then break fi echo "Element: $element" done echo 'All Done!'

Element: Hydrogen Element: Helium All Done!

Ipagpatuloy ang Pahayag

Ang patuloy na pahayag ay lumabas sa kasalukuyang pag-iilaw ng isang loop at ipinapasa ang kontrol sa programa sa susunod na pag-iilaw ng loop.

Sa mga sumusunod na halimbawa, kami ay nangangati sa pamamagitan ng isang hanay ng mga numero at kapag ang kasalukuyang iterated na item ay katumbas ng '2' ang patuloy na pahayag ay magiging sanhi ng pagpapatupad na bumalik sa simula ng loop at magpatuloy sa susunod na pag-ulit.

for i in {1..5}; do if]; then continue fi echo "Number: $i" done

Number: 1 Number: 3 Number: 4 Number: 5

Mga Bash Para sa Mga Loop Halimbawa

Ang pagpapalit ng pangalan ng mga file na may mga puwang sa filename

Ang sumusunod na halimbawa ay nagpapakita kung paano gamitin ang Bash para sa loop upang palitan ang pangalan ng lahat ng mga file sa kasalukuyang direktoryo na may isang puwang sa mga pangalan nito sa pamamagitan ng pagpapalit ng puwang upang mabigyan ng kahulugan.

for file in *\ *; do mv "$file" "${file// /_}" done

Ihiwalay natin ang linya ng code ayon sa linya:

  • Ang unang linya ay lumilikha ng isang para sa loop at iterates sa pamamagitan ng isang listahan ng lahat ng mga file na may isang puwang sa pangalan nito. Ang expression *\ * lumilikha ng listahan.Ang pangalawang linya ay nalalapat sa bawat item ng listahan at inililipat ang file sa isang bago na pinapalitan ang puwang na may isang salungguhit ( _ ). Ang bahaging ${file// /_} ay gumagamit ng pagpapalawak ng parameter ng shell upang mapalitan ang isang pattern sa loob ng isang parameter na may isang string. done nagpapahiwatig ng pagtatapos ng segment ng loop.

Pagbabago ng extension ng file

Ang sumusunod na halimbawa ay nagpapakita kung paano gamitin ang Bash para sa loop upang palitan ang pangalan ng lahat ng mga file na nagtatapos sa.jpeg sa kasalukuyang direktoryo sa pamamagitan ng pagpapalit ng file ng extension mula sa.jpeg sa.jpg.

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg" done

Suriin natin ang linya ng code ayon sa linya:

  • Ang unang linya ay lumilikha ng isang para sa loop at iterates sa pamamagitan ng isang listahan ng lahat ng mga file na nagtatapos sa '.jpeg'.Ang pangalawang linya ay nalalapat sa bawat item ng listahan at gumagalaw ang file sa isang bago na pinapalitan ang'.jpeg 'na may'.jpg '. ${file%.jpeg} upang alisin ang bahagi ng '.jpeg' mula sa filename gamit ang pagpapalawak ng shell parameter na done nagpapahiwatig ng pagtatapos ng segment ng loop.

Konklusyon

Sa ngayon dapat kang magkaroon ng isang mahusay na pag-unawa sa kung paano gamitin ang bash para sa loop upang umulit sa pamamagitan ng mga listahan.

terminal ng bash loop