Paggamit ng 'habang' loop sa Bash scripting upang umulit sa (mga) command.
Ang Bash (Bourne Again Shell) ay isang shell command prompt at scripting language sa GNU/Linux operating system. Ito ang default na shell para sa karamihan ng mga distribusyon ng Linux.
Tulad ng karamihan sa mga wika sa pag-script, ang Bash ay nagbibigay ng mga loop syntax upang ulitin ang katulad na gawain nang maraming beses. Sa artikulong ito matututunan natin kung paano gamitin ang habang
loop sa Bash.
Panimula
Ang habang
Ang loop sa Bash ay ginagamit upang magsagawa ng (mga) utos (mga naisakatuparan na mga utos) nang maraming beses batay sa output ng isa pang (mga) utos (mga utos ng kundisyon). Ang mga nai-execute na command ay patuloy na tatakbo hanggang ang condition command ay matagumpay na tumakbo (ibig sabihin, nagbabalik ng 0 status. Anumang command sa Linux ay nagbabalik ng 0 para sa tagumpay at isang non-zero integer para sa pagkabigo).
Kung mayroong maraming mga utos ng kundisyon, isinasaalang-alang lamang ng pahayag ang katayuan ng huling utos sa listahan, ibig sabihin, ang loop ay ipapatupad hanggang ang huling utos sa listahan ay matagumpay na tumakbo.
Pangkalahatang Syntax
Ang pangkalahatang syntax para sa habang
loop sa Bash ay:
habang ginagawa
Ang listahan ng execute command ay magpapatuloy sa pagtakbo hanggang sa ang huling command sa condition command list ay matagumpay na tumakbo at lalabas na may status 0. Sa pag-ulit, kapag ang huling condition command ay nabigo, ang loop ay lalabas.
Maaaring tukuyin ng user ang anumang maipapatupad na file sa mga listahan ng command. Maaari itong maging karaniwang mga programa sa Linux o mga pasadyang programa o script ng user. Ang bawat command ay dapat na nasa isang bagong linya o pinaghihiwalay ng isang semicolon sa parehong linya.
Tingnan natin ang ilang mga halimbawa.
Ang pag-loop hanggang ang isang variable ay may partikular na halaga: Ang sumusunod na loop ay isinasagawa hanggang sa halaga ng variable x
ay hindi katumbas ng 10.
x=0 habang [[ $x -ne 10 ]] ginagawa ang echo $x ((x++)) tapos
Sa bawat pag-ulit, sinusuri namin kung ang halaga ng x ay 10. Sinusuri ang halaga gamit ang pagsusulit
utos. [[ Expression ]]
ay ang syntax para sa test command (Tingnan pagsubok ng tao
). Dito dahil ginagamit namin ang -ne
operator (na nangangahulugang 'hindi katumbas ng'), ang test command ay nagbabalik ng 0, ibig sabihin, tagumpay, kung ang halaga ng x ay hindi 10, at ito ay nagbabalik ng hindi zero na halaga, ibig sabihin, pagkabigo kung ang halaga ng x ay 10.
Tapos sa loob ng gawin...tapos na
block, ini-print namin ang halaga ng x at dinadagdagan ito. Kapag ang halaga ng x ay 10, ibabalik ng test command ang status na hindi zero, at lalabas ang loop.
Tandaan: Ang variable ng index na gagamitin sa while loop ay dapat na masimulan bago ang while loop o sa mga condition na command, kumpara sa para sa loop, na nagbibigay-daan upang masimulan ang isang variable nang hindi malinaw.
Sa maraming utos ng kundisyon: Ang sumusunod na loop ay lumilikha ng 5 direktoryo na pinangalanan dir0, dir1, ... dir4
.
z=0 habang echo ang "Listahan ng mga file:" ls -l [[ $z -ne 5 ]] gawin echo "Paggawa ng dir$z..." mkdir dir$z ((z++)) tapos na
Mga unang utos echo "Listahan ng mga file:"
at ls -l
ay isasagawa nang isang beses ganap; ang kanilang tagumpay o kabiguan ay walang epekto sa kung gaano katagal tatakbo ang loop.
Pagkatapos ay ipapatupad ang test command para sa pagsuri sa halaga ng variable z. Hanggang sa ang halaga ng z ay hindi 5, ang test command ay nagbabalik ng katayuan ng tagumpay, at samakatuwid ang loop ay patuloy na tumatakbo. Ang mga utos ng kundisyon at mga naisagawang utos ay patuloy na tumatakbo sa pagkakasunud-sunod. Dito, para sa bawat pag-ulit, tatakbo muna ito sa echo command at ls command sa kondisyon at pagkatapos ay susuriin ng 3rd condition na command ang halaga ng z. Kung hindi ito 5, papasok ito sa loop at ipapatupad ang ibinigay na mga utos.
Break at Magpatuloy
Pahayag ng Break para sa Conditional Exit
Maaari rin nating gamitin ang conditional statement kung
sa loob ng loop. Ang kung
ang pahayag ay maaaring gamitin sa a pahinga
pahayag, para sa isang kondisyon na paglabas mula sa loop.
x=0 habang [[ $x -ne 10 ]] gawin kung [[ $x -eq 5 ]] break fi echo $x ((x++)) tapos na
Ang nasa itaas na while loop ay magpi-print ng mga numero mula 0 hanggang 4. Pagkatapos ay kapag ang halaga ng i ay 5, ito ay mawawala sa loop. Ito ay partikular na gamit kapag ang isang loop ay lalabas kapag ang isang command ay nagbibigay ng isang partikular na output.
Ipagpatuloy ang Pahayag upang Laktawan ang isang Pag-ulit nang May Kondisyon
Ang Bash ay mayroon ding isang magpatuloy
statement, upang laktawan ang natitirang bahagi ng isang pag-ulit sa isang loop kung ang isang partikular na kundisyon ay nasiyahan.
x=0 habang [[ $x -ne 10 ]] gawin kung [[ $x -eq 5 ]] magpatuloy fi echo $x ((x++)) tapos
Ang loop sa itaas ay magpi-print ng mga numero mula 0 hanggang 10, maliban sa 5, dahil sa panahon ng pag-ulit ng x=5
mayroong isang continue statement, na laktawan ang natitirang code sa loop sa simula sa pag-ulit ng x=6
.
Paggamit ng Loops: Mga Script at Command Line
Ang mga loop syntax ay maaaring gamitin sa Bash shell nang direkta o mula sa isang executable shell script file. Kapareho ng para sa
at habang
mga loop, minsan isang habang
loop syntax ay ipinasok sa shell, ang shell ay nagpapatuloy sa prompt upang hayaan ang user na ipagpatuloy ang mga utos na i-loop.
O kaya ay maaaring i-save ito ng user sa isang script file at isagawa ang script file.
Ang #!/bin/bash
sa simula ay tumutukoy sa interpreter na gagamitin kapag ang file ay naisakatuparan. Bagama't ang Bash ang pinakakaraniwang ginagamit na shell ngayon, mas gusto ng ilang user ang mga shell na tulad nito zsh
, na dapat tukuyin bilang kapalit ng bash sa simula ng file na ito.
Upang magbigay ng mga pahintulot sa pagpapatupad para sa file na ito, patakbuhin ang:
chmod +x test.sh
Sa wakas, upang maisagawa ang file, tumakbo:
./test.sh
Konklusyon
Ang habang
loop, katulad ng para sa
at hanggang sa
Ang mga loop ay isang mahalagang tampok sa Bash scripting. Habang ang loop ay may katulad na paggamit tulad ng hanggang loop, maliban na ito ay ginagamit upang magpatakbo ng mga alternatibong command/program kapag nagtagumpay ang isang partikular na programa. Madalas nitong nakikita ang pagiging kapaki-pakinabang sa mga advanced na script ng networking, mga script ng pagpapanatili ng system, atbp.