Paano Magtrabaho sa Mga Variable sa Bash
Mahalaga ang mga variable kung nais mong magsulat ng mga script at maunawaan kung ano ang code na malapit mong i-cut at i-paste mula sa web ang gagawin sa iyong computer sa Linux. Sisimulan ka namin!
Mga variable 101
Ang mga variable ay pinangalanan na mga simbolo na kumakatawan sa alinman sa isang string o numerong halaga. Kapag ginamit mo ang mga ito sa mga utos at expression, itinuturing ang mga ito na para bang nai-type mo ang halagang hawak nila sa halip na ang pangalan ng variable.
Upang lumikha ng isang variable, magbigay ka lamang ng isang pangalan at halaga para dito. Ang iyong mga pangalan ng variable ay dapat na mapaglarawan at ipaalala sa iyo ang halagang hawak nila. Ang isang variable na pangalan ay hindi maaaring magsimula sa isang numero, o maaari ring maglaman ng mga puwang. Gayunpaman, maaari itong magsimula sa isang underscore. Bukod sa na, maaari mong gamitin ang anumang paghahalo ng pang-itaas at maliit na alphanumeric na mga character.
Mga halimbawa
Dito, lilikha kami ng limang mga variable. Ang format ay upang i-type ang pangalan, ang katumbas na pag-sign =
, at ang halaga. Tandaan na walang puwang bago o pagkatapos ng katumbas na pag-sign. Ang pagbibigay ng variable ng isang halaga ay madalas na tinukoy bilang nagtatalaga isang halaga sa variable.
Lilikha kami ng apat na variable ng string at isang variable ng numero,ngayong taon:
ako = Dave
my_boost = Linux
siya = Popeye
kanyang_boost = Spinach
this_year = 2019
Upang makita ang halagang hawak sa isang variable, gamitin ang echo
utos Dapat mong unahin ang variable na pangalan na may isang sign ng dolyar $
tuwing tinutukoy mo ang halagang naglalaman nito, tulad ng ipinakita sa ibaba:
echo $ my_name
echo $ my_boost
echo $ this_year
Gamitin natin lahat ng ating mga variable nang sabay-sabay:
echo "$ my_boost is to $ me as $ his_boost is to $ him (c) $ this_year"
Ang mga halaga ng mga variable ay pinalitan ang kanilang mga pangalan. Maaari mo ring baguhin ang mga halaga ng mga variable. Upang magtalaga ng isang bagong halaga sa variable,my_boost
, inuulit mo lang ang ginawa mo noong itinalaga mo ang unang halaga nito, tulad nito:
my_boost = Tequila
Kung pinatakbo mo ulit ang nakaraang utos, nakakakuha ka na ngayon ng ibang resulta:
echo "$ my_boost is to $ me as $ his_boost is to $ him (c) $ this_year"
Kaya, maaari mong gamitin ang parehong utos na tumutukoy sa parehong mga variable at makakuha ng iba't ibang mga resulta kung binago mo ang mga halagang hinahawakan sa mga variable.
Pag-uusapan natin ang tungkol sa pag-quote ng mga variable sa paglaon. Sa ngayon, narito ang ilang mga bagay na dapat tandaan:
- Isang variable sa iisang mga quote
'
ay ginagamot bilang isang literal na string, at hindi bilang isang variable. - Mga variable sa mga marka ng panipi
"
ay itinuturing bilang mga variable. - Upang makuha ang halagang hawak sa isang variable, kailangan mong ibigay ang dolyar na sign
$
. - Isang variable na walang marka ng dolyar
$
nagbibigay lamang ng pangalan ng variable.
Maaari ka ring lumikha ng isang variable na kukuha ng halaga mula sa isang mayroon nang variable o bilang ng mga variable. Ang sumusunod na utos ay tumutukoy sa isang bagong variable na tinawag uminom ng ng_ taon,
at itinalaga ito ng pinagsamang halaga ng my_boost
at ngayong taon
variable:
inumin_of-the_Year = "$ my_boost $ this_year"
echo inumin_ng_ Taon
Paano Gumamit ng Mga Variable sa Mga Script
Ang mga script ay magiging ganap na hamstrung nang walang mga variable. Nagbibigay ang mga variable ng kakayahang umangkop na gumagawa ng isang pangkalahatang script, sa halip na isang tukoy, solusyon. Upang ilarawan ang pagkakaiba, narito ang isang script na binibilang ang mga file sa / dev
direktoryo
I-type ito sa isang text file, at pagkatapos ay i-save ito bilang fcnt.sh
(para sa "bilang ng file"):
#! / bin / bash folder_to_count = / dev file_count = $ (ls $ folder_to_count | wc -l) echo $ file_count files sa $ folder_to_count
Bago mo mapatakbo ang script, kailangan mo itong maisagawa, tulad ng ipinakita sa ibaba:
chmod + x fcnt.sh
I-type ang sumusunod upang patakbuhin ang script:
./fcnt.sh
Nai-print nito ang bilang ng mga file sa / dev
direktoryo Narito kung paano ito gumagana:
- Tinawag ang isang variable
folder_to_count
ay tinukoy, at nakatakda itong hawakan ang string na "/ dev." - Ang isa pang variable, tinawag
file_count
, ay tinukoy. Kinukuha ng variable na ito ang halaga nito mula sa isang pagpapalit ng utos. Ito ang parirala ng utos sa pagitan ng panaklong$( )
. Tandaan na mayroong isang sign ng dolyar$
bago ang unang panaklong. Ang konstruksyon na ito$( )
sinusuri ang mga utos sa loob ng panaklong, at pagkatapos ay ibinalik ang kanilang huling halaga. Sa halimbawang ito, ang halagang iyon ay itinalaga safile_count
variable. Hanggang safile_count
nababahala ang variable, naipasa ang halagang hinahawakan; hindi ito nag-aalala kung paano nakuha ang halaga. - Ang utos na sinuri sa pagpapalit ng utos ay gumaganap ng isang
ls
listahan ng file sa direktoryo safolder_to_count
variable, na itinakda sa "/ dev." Kaya, ang script ay nagpapatupad ng utos na "ls / dev." - Ang output mula sa utos na ito ay nai-pip sa
wc
utos Ang-l
(linya bilang) sanhi ng pagpipilianwc
upang mabilang ang bilang ng mga linya sa output mula sals
utos Tulad ng bawat file ay nakalista sa isang hiwalay na linya, ito ang bilang ng mga file at subdirectory sa direktoryo ng "/ dev". Ang halagang ito ay itinalaga safile_count
variable. - Gumagamit ang pangwakas na linya ng echo upang maipakita ang resulta.
Ngunit gagana lamang ito para sa direktoryo ng "/ dev". Paano namin magagawa ang script na gumana sa anumang direktoryo? Ang kailangan lang nito ay isang maliit na pagbabago.
Paano Gumamit ng Mga Parameter ng Command Line sa Mga Script
Maraming mga utos, tulad ng ls
at wc
, kunin ang mga parameter ng command line. Nagbibigay ang mga ito ng impormasyon sa utos, kaya't alam nito kung ano ang nais mong gawin. Kung gusto mols
upang gumana sa iyong direktoryo sa bahay at upang ipakita din ang mga nakatagong mga file, maaari mong gamitin ang sumusunod na utos, kung saan ang tilde ~
at ang -a
Ang pagpipiliang (lahat) ay mga parameter ng linya ng utos:
ls ~ -a
Maaaring tanggapin ng aming mga script ang mga parameter ng linya ng utos. Nasangguni sila bilang $1
para sa unang parameter, $2
bilang pangalawa, at iba pa, hanggang sa $9
para sa ikasiyam na parameter. (Sa totoo lang, mayroong isang $0
, pati na rin, ngunit nakalaan iyon upang laging hawakan ang script.)
Maaari mong sanggunian ang mga parameter ng linya ng utos sa isang script tulad ng nais mong regular na mga variable. Baguhin natin ang aming script, tulad ng ipinakita sa ibaba, at i-save ito sa bagong pangalanfcnt2.sh
:
#! / bin / bash folder_to_count = $ 1 file_count = $ (ls $ folder_to_count | wc -l) echo $ file_count files sa $ folder_to_count
Sa pagkakataong ito, ang folder_to_count
ang variable ay nakatalaga sa halaga ng unang parameter ng linya ng utos, $1
.
Ang natitirang script ay gumagana nang eksakto tulad ng dati. Sa halip na isang tukoy na solusyon, ang iyong script ay isang pangkalahatang ngayon. Maaari mo itong magamit sa anumang direktoryo dahil hindi ito hardcoded upang gumana lamang sa "/ dev."
Narito kung paano mo naisasagawa ang script:
chmod + x fcnt2.sh
Ngayon, subukan ito sa ilang mga direktoryo. Maaari mong gawin ang "/ dev" muna upang matiyak na nakukuha mo ang parehong resulta tulad ng dati. I-type ang sumusunod:
./fnct2.sh / dev
./fnct2.sh / atbp
./fnct2.sh / basurahan
Nakukuha mo ang parehong resulta (207 mga file) tulad ng dati para sa direktoryo na "/ dev". Nakasisigla ito, at nakakakuha ka ng mga resulta na tukoy sa direktoryo para sa bawat isa pang mga parameter ng linya ng utos.
Upang paikliin ang script, maaari mong itapon ang variable,folder_to_count
, kabuuan, at sanggunian lamang $1
sa buong, tulad ng sumusunod:
#! / bin / bash file_count = $ (ls $ 1 wc -l) echo $ file_count files sa $ 1
Paggawa gamit ang Mga Espesyal na variable
Nabanggit namin $0
, na palaging nakatakda sa filename ng script. Pinapayagan kang gamitin ang script upang gumawa ng mga bagay tulad ng mai-print nang tama ang pangalan nito, kahit na pinalitan ito ng pangalan. Kapaki-pakinabang ito sa mga sitwasyon sa pag-log, kung saan nais mong malaman ang pangalan ng proseso na nagdagdag ng isang entry.
Ang mga sumusunod ay ang iba pang mga espesyal na preset na variable.
- $#: Ilan sa mga parameter ng linya ng utos ang naipasa sa script.
- $@: Ang lahat ng mga parameter ng linya ng utos na ipinasa sa script.
- $?: Ang katayuan ng exit ng huling proseso upang tumakbo.
- $$: Ang Process ID (PID) ng kasalukuyang script.
- $ USER: Ang username ng gumagamit na nagpapatupad ng script.
- $ HOSTNAME: Ang hostname ng computer na nagpapatakbo ng script.
- $ SECONDS: Ang bilang ng mga segundo na tumatakbo ang script.
- $ RANDOM: Nagbabalik ng isang random na numero.
- $ LINENO: Ibinabalik ang kasalukuyang numero ng linya ng script.
Nais mong makita ang lahat sa kanila sa isang script, hindi ba? Kaya mo! I-save ang sumusunod bilang isang text file na tinatawag na,espesyal.sh
:
#! / bin / bash echo "Mayroong $ # mga parameter ng linya ng utos" echo "Ang mga ito ay: $ @" echo "Parameter 1 ay: $ 1" echo "Ang script ay tinawag na: $ 0" # anumang lumang proseso upang makapag-ulat kami sa katayuan ng exit pwd echo "pwd nagbalik ng $?" echo "Ang script na ito ay may Process ID $$" echo "Ang script ay sinimulan ni $ USER" echo "Ito ay tumatakbo sa $ HOSTNAME" sleep 3 echo "Ito ay tumatakbo sa loob ng $ SECONDS segundo" echo "Random number: $ RANDOM" echo "Ito ang numero ng linya na $ LINENO ng script"
I-type ang sumusunod upang maisagawa ito:
chmod + x special.sh
Ngayon, maaari mo itong patakbuhin sa isang bungkos ng iba't ibang mga parameter ng linya ng utos, tulad ng ipinakita sa ibaba.
Mga variable sa kapaligiran
Gumagamit ang Bash ng mga variable ng kapaligiran upang tukuyin at maitala ang mga katangian ng kapaligiran na nilikha nito kapag inilunsad ito. Ang impormasyon ng paghawak na ito ay madaling ma-access ng Bash, tulad ng iyong username, lokal, ang bilang ng mga utos na maaaring hawakan ng iyong file sa kasaysayan, ang iyong default na editor, at marami pa.
Upang makita ang mga aktibong variable ng kapaligiran sa iyong session sa Bash, gamitin ang utos na ito:
env | mas kaunti
Kung mag-scroll ka sa listahan, maaari kang makahanap ng ilang kapaki-pakinabang na sanggunian sa iyong mga script.
Paano Mag-export ng Mga Variable
Kapag tumatakbo ang isang script, nasa sarili nitong proseso ito, at ang mga variable na ginagamit nito ay hindi makikita sa labas ng prosesong iyon. Kung nais mong ibahagi ang isang variable sa isa pang script na inilulunsad ng iyong script, kailangan mong i-export ang variable na iyon. Ipapakita namin sa iyo kung paano ito sa dalawang script.
Una, i-save ang sumusunod sa filenamescript_one.sh
:
#! / bin / bash first_var = alpha second_var = bravo # suriin ang kanilang mga halagang echo "$ 0: first_var = $ first_var, second_var = $ second_var" export first_var export second_var ./script_two.sh # suriin muli ang kanilang mga halagang "$ 0: first_var = $ first_var, second_var = $ segundo_var "
Lumilikha ito ng dalawang variable, una_var
at pangalawang_var
, at nagtatalaga ito ng ilang mga halaga. I-print ang mga ito sa window ng terminal, i-export ang mga variable, at tawag script_two.sh
. Kailan script_two.sh
tinatapos, at ang pagbabalik ng daloy ng proseso ay bumalik sa script na ito, muling inililimbag nito ang mga variable sa window ng terminal. Pagkatapos, makikita mo kung nagbago ang mga ito.
Ang pangalawang script na gagamitin namin ay script_two.sh
. Ito ang iskrip nascript_one.sh
tawag. I-type ang sumusunod:
#! / bin / bash # suriin ang kanilang mga halagang echo "$ 0: first_var = $ first_var, second_var = $ second_var" # magtakda ng mga bagong halagang first_var = charlie second_var = delta # suriin muli ang kanilang mga halagang echo "$ 0: first_var = $ first_var, second_var = $ segundo_var "
Ang pangalawang script na ito ay naglilimbag ng mga halaga ng dalawang variable, nagtatalaga ng mga bagong halaga sa kanila, at pagkatapos ay muling nai-print ang mga ito.
Upang patakbuhin ang mga script na ito, kailangan mong i-type ang sumusunod upang maipapatupad ang mga ito:
chmod + x script_one.sh chmod + x script_two.sh
At ngayon, i-type ang sumusunod upang ilunsad script_one.sh
:
./script_one.sh
Ito ang sinabi sa atin ng output:
- script_one.sh mga kopya ng halaga ng mga variable, na alpha at bravo.
- script_two.sh naglilimbag ng mga halaga ng mga variable (alpha at bravo) tulad ng pagtanggap nito sa kanila.
- script_two.sh binago ang mga ito sa charlie at delta.
- script_one.sh naka-print ang mga halaga ng mga variable, na kung saan ay alpha at bravo pa rin.
Ano ang nangyayari sa pangalawang script, mananatili sa pangalawang script. Ito ay tulad ng mga kopya ng mga variable na ipinapadala sa pangalawang script, ngunit itinapon ito kapag lumabas ang script na iyon. Ang mga orihinal na variable sa unang script ay hindi binago ng anumang nangyayari sa mga kopya ng mga ito sa pangalawa.
Paano Mag-quote ng Mga Variable
Maaaring napansin mo na kapag ang mga script ay tumutukoy sa mga variable, ang mga ito ay nasa mga marka ng panipi "
. Pinapayagan nitong mag-refer nang tama ang mga variable, kaya ginagamit ang kanilang mga halaga kapag ang linya ay naisakatuparan sa script.
Kung ang halagang itinalaga mo sa isang variable ay may kasamang mga puwang, dapat nasa mga marka ng panipi ang mga ito kapag naitalaga mo sila sa variable. Ito ay dahil, bilang default, gumagamit si Bash ng isang puwang bilang isang delimiter.
Narito ang isang halimbawa:
site_name = How-To Geek
Nakita ni Bash ang puwang bago ang "Geek" bilang isang pahiwatig na nagsisimula ang isang bagong utos. Iniuulat na walang naturang utos, at pinababayaan ang linya. echo
ipinapakita sa atin na ang site_name
walang hawak ang variable - kahit na ang teksto na "Paano-Upang".
Subukan ulit iyon sa mga marka ng panipi sa paligid ng halaga, tulad ng ipinakita sa ibaba:
site_name = "How-To Geek"
Sa oras na ito, kinikilala ito bilang isang solong halaga at naitalaga nang tama sa site_name
variable.
echo ba ang Kaibigan mo
Maaari itong tumagal ng ilang oras upang masanay upang mag-utos ng pagpapalit, pag-quote ng mga variable, at pag-alala kung kailan isasama ang sign ng dolyar.
Bago mo pindutin ang Enter at magpatupad ng isang linya ng mga utos ng Bash, subukan ito echo
sa harap nito. Sa ganitong paraan, maaari mong matiyak na kung ano ang mangyayari ay kung ano ang gusto mo. Maaari mo ring mahuli ang anumang mga pagkakamali na maaaring nagawa mo sa syntax.