Paano Sumulat ng Bash WHILE-Loops

Mga utos, Syntax, at Mga Halimbawa

Maaari mong isagawa ang isang pagkakasunud-sunod ng mga utos sa pamamagitan ng pagsusulat ng mga ito sa isang script file at pagkatapos ay patakbuhin ito.

Ang isang file na script ay isang tekstong file lamang, kadalasang may extension ng .H file, na naglalaman ng isang pagkakasunud-sunod ng mga tagubilin na maaari ring isagawa mula sa command line ( shell ).

Habang Mga Halimbawa ng Loop

Sa ibaba ay isang halimbawa ng isang habang loop. Kapag naisagawa, ang script na file na ito ay i-print ang mga numero 1 hanggang 9 sa screen. Ang habang-pahayag ay nagbibigay sa iyo ng higit na kakayahang umangkop para sa pagtukoy ng kondisyon ng termination kaysa sa for-loop .

#! / bin / bash count = 1 habang [$ count -le 9] gawin echo "$ count" sleep 1 ((count ++)) tapos na

Halimbawa, maaari mong gawin ang nakaraang script ng isang walang katapusang loop sa pamamagitan ng pag-omit sa pahayag ng increment "((count ++))":

#! / bin / bash count = 1 habang [$ count -le 9] gawin echo "$ count" sleep 1 done

Ang pahayag ng "sleep 1" ay nagpapatigil sa pagpapatupad ng 1 segundo sa bawat pag-ulit. Gamitin ang shortcut ng keyboard ng Ctrl + C upang wakasan ang proseso.

Maaari ka ring lumikha ng isang walang katapusang loop sa pamamagitan ng paglalagay ng colon bilang kondisyon:

#! / bin / bash count = 1 habang: gawin echo "$ count" sleep 1 ((count ++)) tapos na

Upang magamit ang maraming kundisyon sa habang-loop, kailangan mong gamitin ang double square bracket notasyon:

count = 1 done = 0 habang [[$ count -le 9] && [$ done == 0]] gawin echo "$ count" sleep 1 ((count ++)) kung [$ count == 5]; pagkatapos $ tapos = 1 fi tapos na

Sa script na ito, ang variable na "tapos na" ay sinimulan sa 0 at pagkatapos ay itakda sa 1 kapag ang bilang ay umabot sa 5. Ang kalagayan ng loop ay nagpapahayag na ang habang loop ay magpapatuloy hangga't ang "count" ay mas mababa sa siyam at "tapos" ay pantay sa zero. Kaya ang mga loop ay lumabas kapag ang bilang ay katumbas ng 5.

Ang "&&" ay nangangahulugang lohikal na "at" at "||" ay nangangahulugang lohikal "o".

Ang isang alternatibong notasyon para sa mga kondisyon "at" at "o" sa mga kondisyon ay "-a" at "-o" na may iisang parisukat na mga bracket. Ang kalagayan sa itaas:

[[$ count -le 9] && [$ done == 0]]

... maaaring muling isulat bilang:

[$ count -le 9] -a [$ done == 0]

Ang pagbabasa ng isang tekstong file ay karaniwang ginagawa sa isang habang loop. Sa sumusunod na halimbawa, binabasa ng script ng bash ang mga nilalaman sa pamamagitan ng linya ng isang file na tinatawag na "inventory.txt:"

FILE = inventory.txt exec 6

Inilalaan ng unang linya ang input file name sa variable na "FILE". Ang ikalawang linya ay nagse-save ng "karaniwang input" sa file descriptor "6" (maaaring ito ay anumang halaga sa pagitan ng 3 at 9). Ginagawa ito upang ang "karaniwang input" ay maibalik sa file descriptor "0" sa dulo ng script (tingnan ang pahayag na "exec 0" Sa ika-3 linya ang input file ay itinalaga sa file descriptor "0," na ginagamit para sa karaniwang input. Ang pahayag ng "read" ay binabasa ang isang linya mula sa file sa bawat pag-ulit at inilalaan ito sa variable na "line1".

Upang maagang lumabas sa isang habang-loop, maaari mong gamitin ang break na pahayag tulad nito:

count = 1 done = 0 habang [$ count -le 9] gawin echo "$ count" matulog 1 ((count ++)) kung [$ count == 5] pagkatapos ay i-break fi tapos echo Tapos

Ang pahayag ng pahinga ay nagpapatakbo ng pagpapatupad ng programa hanggang sa dulo habang ang loop at nagsasagawa ng anumang mga pahayag na sumusunod dito. Sa kasong ito, ang pahayag na "echo Finished."

Ang patuloy na pahayag, sa kabilang banda, ay naglalampas lamang sa natitirang bahagi ng habang pahayag ng loop ng kasalukuyang pag-ulit at direktang jumps sa susunod na pag-ulit:

count = 1 done = 0 habang [$ count -le 9] matulog 1 ((count ++)) kung [$ count == 5] pagkatapos ay magpatuloy fi echo "$ count" done echo Finished

Sa kasong ito, ang pagpapatupad ng "magpatuloy" ay isinasagawa kapag ang variable na "count" ay umaabot sa 5. Ito ay nangangahulugang ang kasunod na pahayag (echo "$ count") ay hindi isinasagawa sa pag-ulit na ito (kapag ang halaga ng "count" ay 5).