Paggamit ng 'hanggang' loop sa isang Bash script upang i-loop ang (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 mga katulad na gawain nang maraming beses. Sa artikulong ito, matututunan natin kung paano gamitin ang hanggang sa
loop sa Bash.
Panimula
Ang hanggang sa
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 sa ang condition command ay patuloy na mabibigo (ibig sabihin, nagbabalik ng hindi zero na status. Anumang command sa Linux ay nagbabalik ng 0 para sa tagumpay at isang hindi zero integer para sa pagkabigo). Ito ay eksaktong kabaligtaran ng habang
loop, kung saan patuloy na tumatakbo ang mga naisagawang utos hanggang sa matagumpay na utos ng kundisyon.
Kung mayroong maraming mga utos ng kundisyon, ang pahayag ay isinasaalang-alang lamang ang katayuan ng huling utos sa listahan, ibig sabihin, ang loop ay tatakbo hanggang ang huling utos sa listahan ay patuloy na nabigo.
Pangkalahatang Syntax
Ang pangkalahatang syntax para sa hanggang sa
loop sa Bash ay:
hanggang sa tapos na
Ang listahan ng execute command ay tatakbo hanggang sa mabigo ang huling command sa condition command list. Kapag matagumpay na ang huling utos, lalabas ang loop.
Maaaring tukuyin ng mga 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 10.
x=0 hanggang [[ $x -eq 10 ]] gawin 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
).
Tapos sa loob ng gawin...tapos na
block, i-print lang namin ang halaga ng x, at dagdagan ito. Lalabas ang loop kapag matagumpay ang utos ng kundisyon, ibig sabihin, kapag $x
ay katumbas ng 10
.
Tandaan: Ang variable ng index na gagamitin sa loop na 'hanggang' ay dapat masimulan bago ang loop na 'hanggang' o sa mga utos ng kundisyon, 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 hanggang echo "Hi" echo "Bye" [[ $z -eq 5 ]] gawin echo "Gumagawa ng dir$z..." mkdir dir$z ((z++)) tapos na
Ang mga unang utos ay echo "Hi" at echo "Bye" ay isasagawa nang isang beses nang 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 ang utos na ito ay patuloy na nabigo, ibig sabihin, hanggang ang halaga ng z ay 5, 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 2 echo 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
isang pahayag, para sa isang kondisyon na paglabas mula sa loop.
x=0 hanggang [[ $x -eq 10 ]] gawin kung [[ $x -eq 5 ]] break fi echo $x ((x++)) tapos na
Ang itaas hanggang loop ay magpi-print ng mga numero mula 0 hanggang 4. Pagkatapos ay kapag ang halaga ng i ay 5, ito ay lalabas 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
pahayag na laktawan ang natitirang bahagi ng isang pag-ulit sa isang loop kung ang isang partikular na kundisyon ay nasiyahan.
x=0 hanggang [[ $x -eq 10 ]] gawin kung [[ $x -eq 5 ]] magpatuloy sa 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 hanggang sa
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 kung hindi, 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 hanggang sa
loop ay isa pang mahalagang tampok sa Bash scripting. Ito ay may partikular na kahalagahan sa mga kumplikadong script kapag ang isang tiyak na hanay ng mga programa ay inaasahang magbabalik ng katayuan ng pagkabigo, at ang ilang iba pang (mga) utos ay isasagawa upang i-log ang pagkabigo, ipakita ang error nang detalyado, o simpleng magsagawa ng ilang mga alternatibong programa.