Leo tutazungumza juu ya maandishi ya bash. Hii - maandishi ya mstari wa amri, iliyoandikwa kwa ganda la bash. Kuna makombora mengine kama zsh, tcsh, ksh, lakini tutazingatia bash. Nyenzo hii imekusudiwa kila mtu, hali pekee ni uwezo wa kufanya kazi ndani mstari wa amri Linux.
Maandishi ya mstari wa amri ni makusanyo ya amri sawa ambazo zinaweza kuingizwa kutoka kwa kibodi, zilizokusanywa kwenye faili na kuunganishwa na madhumuni fulani ya kawaida. Katika hali hii, matokeo ya kazi ya timu yanaweza kuwa ya thamani huru au kutumika kama data ya ingizo kwa timu zingine. Hati ni njia nzuri ya kugeuza vitendo vinavyofanywa kiotomatiki.
Kwa hivyo, ikiwa tunazungumza juu ya mstari wa amri, hukuruhusu kutekeleza amri kadhaa mara moja kwa kuziingiza zilizotengwa na semicolon:
pwd ; whoami
Kwa kweli, ikiwa ulijaribu hii kwenye terminal yako, hati yako ya kwanza ya bash inayohusisha amri mbili tayari imeandikwa. Inafanya kazi kama hii. Timu kwanza pwd inaonyesha habari kuhusu saraka ya sasa ya kufanya kazi, kisha amri whoamiinaonyesha habari kuhusu mtumiaji ambaye umeingia kama.
Kutumia mbinu hii, unaweza kuchanganya amri nyingi kama unavyopenda kwenye mstari mmoja, kikomo pekee ni idadi ya juu ya hoja zinazoweza kupitishwa kwa programu. Unaweza kufafanua kikomo hiki kwa kutumia amri ifuatayo:
getconf ARG_MAX
Mstari wa amri ni chombo kikubwa, lakini unapaswa kuingiza amri ndani yake kila wakati unapozihitaji. Je, ikiwa tutaandika seti ya amri kwenye faili na kuita faili hiyo ili kuzitekeleza? Kwa kweli, faili tunayozungumzia inaitwa script ya mstari wa amri.
Jinsi maandishi ya bash yanavyofanya kazi
Unda faili tupu kwa kutumia amri touch. Mstari wake wa kwanza unahitaji kuonyesha ni ganda gani tutatumia. Tunavutiwa na bash, kwa hivyo safu ya kwanza ya faili itakuwa:
#!/bin/bash
Mistari mingine kwenye faili hii hutumia alama ya heshi kuonyesha maoni ambayo ganda halichakati. Walakini, mstari wa kwanza ni kesi maalum, kuna heshi ikifuatiwa na alama ya mshangao (mlolongo huu unaitwa shebang) na njia ya kwenda bash, onyesha kwa mfumo ambao hati iliundwa mahususi bash.
Amri za Shell zinatenganishwa na mlisho wa mstari, maoni yanatenganishwa na ishara ya hashi. Hivi ndivyo inavyoonekana:
#!/bin/bash
# This is a comment
pwd
whoami
Hapa, kama vile kwenye mstari wa amri, unaweza kuandika amri kwenye mstari mmoja, ukitenganishwa na semicolons. Hata hivyo, ukiandika amri kwenye mistari tofauti, faili ni rahisi kusoma. Kwa hali yoyote, shell itawasindika.
Kuweka ruhusa za faili ya hati
Hifadhi faili ukiipa jina myscript, na kazi ya kuunda hati ya bash iko karibu kumaliza. Sasa kilichobaki ni kufanya faili hii itekelezwe, vinginevyo, ukijaribu kuiendesha, utakutana na hitilafu. Permission denied.
Inajaribu kuendesha faili ya hati iliyo na vibali vilivyosanidiwa vibaya
Wacha tufanye faili itekelezwe:
chmod +x ./myscript
Sasa hebu tujaribu kuitekeleza:
./myscript
Baada ya kuweka ruhusa kila kitu hufanya kazi kama inavyopaswa.
Imefaulu kuendesha hati ya bash
Pato la ujumbe
Ili kutoa maandishi kwa koni ya Linux, tumia amri echo. Wacha tutumie ufahamu wa ukweli huu na kuhariri hati yetu, na kuongeza maelezo kwa data ambayo hutolewa na maagizo tayari ndani yake:
#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami
Hii ndio hufanyika baada ya kuendesha hati iliyosasishwa.
Inatoa ujumbe kutoka kwa hati
Sasa tunaweza kuonyesha maelezo ya maelezo kwa kutumia amri echo. Ikiwa hujui jinsi ya kuhariri faili kwa kutumia zana za Linux, au haujaona amri hapo awali echo, angalia hii vifaa.
Kutumia Vigezo
Vigezo hukuruhusu kuhifadhi habari katika faili ya hati, kama vile matokeo ya amri, kwa matumizi ya amri zingine.
Hakuna chochote kibaya kwa kutekeleza amri za kibinafsi bila kuhifadhi matokeo yao, lakini mbinu hii ni mdogo katika uwezo wake.
Kuna aina mbili za anuwai ambazo zinaweza kutumika katika hati za bash:
Vigezo vya Mazingira
Vigezo vya Mtumiaji
Vigezo vya Mazingira
Wakati mwingine amri za shell zinahitaji kufanya kazi na data fulani ya mfumo. Hapa kuna mfano wa jinsi ya kuonyesha saraka ya nyumbani ya mtumiaji wa sasa:
#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"
Tafadhali kumbuka kuwa tunaweza kutumia mabadiliko ya mfumo $HOME katika nukuu mara mbili, hii haitazuia mfumo kuitambua. Hii ndio unapata ikiwa utaendesha hali iliyo hapo juu.
Kutumia mabadiliko ya mazingira katika hati
Je, ikiwa unahitaji kuonyesha ishara ya dola kwenye skrini? Hebu jaribu hili:
echo "I have $1 in my pocket"
Mfumo utagundua ishara ya dola katika mfuatano ulionukuliwa na kudhani kuwa tumerejelea kigezo. Hati itajaribu kuonyesha thamani ya kigezo kisichobainishwa $1. Hii sio tunayohitaji. Nini cha kufanya?
Katika hali hii, kwa kutumia tabia ya kutoroka, kurudi nyuma, kabla ya ishara ya dola itasaidia:
echo "I have $1 in my pocket"
Hati sasa itatoa kile kinachotarajiwa.
Kwa kutumia mlolongo wa kutoroka ili kuchapisha ishara ya dola
Vigezo vya Mtumiaji
Kwa kuongezea anuwai za mazingira, hati za bash hukuruhusu kufafanua na kutumia anuwai zako kwenye hati. Vigeu hivyo hushikilia thamani hadi hati ikamilishe utekelezaji.
Kama ilivyo kwa vigezo vya mfumo, vigeu vya mtumiaji vinaweza kupatikana kwa kutumia ishara ya dola:
TNW-CUS-FMP - msimbo wa ofa kwa punguzo la 10% kwenye huduma zetu, unapatikana kwa kuwezesha ndani ya siku 7
#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"
Hii ndio hufanyika baada ya kuendesha hati kama hiyo.
Vigezo Maalum katika Hati
Ubadilishaji wa Amri
Mojawapo ya sifa muhimu zaidi za hati za bash ni uwezo wa kutoa habari kutoka kwa pato la amri na kuikabidhi kwa anuwai, hukuruhusu kutumia habari hii mahali popote kwenye faili ya hati.
Kuna njia mbili za kufanya hivyo.
Kwa kutumia tiki "`"
Kwa kubuni $()
Unapotumia njia ya kwanza, kuwa mwangalifu usijumuishe alama moja ya nukuu mahali pa mgongo. Amri lazima iambatanishwe katika ikoni mbili kama hizi:
mydir=`pwd`
Katika njia ya pili, jambo lile lile limeandikwa kama hii:
mydir=$(pwd)
Na maandishi yanaweza kuishia kuonekana kama hii:
#!/bin/bash
mydir=$(pwd)
echo $mydir
Wakati wa uendeshaji wake, pato la amri pwditahifadhiwa kwa kutofautisha mydir, yaliyomo ambayo, kwa kutumia amri echo, itaenda kwenye console.
Hati inayohifadhi matokeo ya amri katika kutofautisha
Shughuli za hisabati
Kufanya shughuli za hisabati katika faili ya hati, unaweza kutumia construct kama $((a+b)):
Katika hali zingine, unahitaji kudhibiti mtiririko wa utekelezaji wa amri. Kwa mfano, ikiwa thamani fulani ni kubwa kuliko tano, unahitaji kufanya kitendo kimoja, vinginevyo, kingine. Hii inatumika katika hali nyingi, na hapa muundo wa udhibiti utatusaidia if-then. Kwa fomu yake rahisi inaonekana kama hii:
if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
fi
Hapa kuna mfano wa kufanya kazi:
#!/bin/bash
if pwd
then
echo "It works"
fi
Katika kesi hii, ikiwa amri inatekelezwa pwditakamilika kwa ufanisi, maandishi "inafanya kazi" yataonyeshwa kwenye console.
Wacha tutumie maarifa tuliyo nayo na tuandike hati ngumu zaidi. Wacha tuseme tunahitaji kupata mtumiaji fulani ndani /etc/passwd, na ikiwa umeweza kuipata, ripoti kwamba iko.
#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi
Hii ndio hufanyika baada ya kuendesha hati hii.
Utafutaji wa mtumiaji
Hapa tulitumia amri grepkutafuta mtumiaji katika faili /etc/passwd. Ikiwa timu grephaijulikani kwako, maelezo yake yanaweza kupatikana hapa.
Katika mfano huu, ikiwa mtumiaji anapatikana, hati itaonyesha ujumbe unaofanana. Je, ikiwa mtumiaji hakuweza kupatikana? Katika kesi hii, hati itakamilisha tu utekelezaji bila kutuambia chochote. Tungependa atuambie kuhusu hili pia, kwa hivyo tutaboresha msimbo.
ikiwa-basi-mwingine udhibiti wa ujenzi
Ili programu iweze kuripoti matokeo yote ya utafutaji na kushindwa kwa mafanikio, tutatumia ujenzi if-then-else. Hivi ndivyo inavyofanya kazi:
if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
else
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
fi
Ikiwa amri ya kwanza itarudisha sifuri, ambayo inamaanisha ilitekelezwa kwa mafanikio, hali itakuwa kweli na utekelezaji hautaendelea kwenye tawi. else. Vinginevyo, ikiwa kitu kingine isipokuwa sifuri kitarejeshwa, ambacho kitaonyesha kutofaulu, au matokeo ya uwongo, amri baada ya hapo else.
Wacha tuandike hati ifuatayo:
#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesnβt exist"
fi
Utekelezaji wake ulikwenda chini ya maji else.
Kuendesha hati iliyo na muundo wa ikiwa-basi-mwingine
Naam, hebu tuendelee na tujiulize kuhusu hali ngumu zaidi. Ikiwa unahitaji kuangalia sio hali moja, lakini kadhaa? Kwa mfano, ikiwa mtumiaji anayetaka anapatikana, ujumbe mmoja unapaswa kuonyeshwa, ikiwa hali nyingine inakabiliwa, ujumbe mwingine unapaswa kuonyeshwa, na kadhalika. Katika hali kama hiyo, hali ya kiota itatusaidia. Inaonekana kama hii:
if ΠΊΠΎΠΌΠ°Π½Π΄Π°1
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
elif ΠΊΠΎΠΌΠ°Π½Π΄Π°2
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ
fi
Ikiwa amri ya kwanza inarudisha sifuri, ambayo inaonyesha utekelezaji wake uliofanikiwa, amri kwenye kizuizi cha kwanza zitatekelezwa. then, vinginevyo, ikiwa hali ya kwanza ni ya uwongo na ikiwa amri ya pili inarudi sifuri, kizuizi cha pili cha msimbo kitatekelezwa.
#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesnβt exist but anyway there is a directory under /home"
fi
Katika hati kama hiyo, unaweza, kwa mfano, kuunda mtumiaji mpya kwa kutumia amri useradd, ikiwa utafutaji haukutoa matokeo, au kufanya kitu kingine muhimu.
Ulinganisho wa nambari
Katika hati unaweza kulinganisha maadili ya nambari. Ifuatayo ni orodha ya amri zinazofaa.
n1 -eq n2Hurejesha kweli ikiwa n1 sawa n2. n1 -ge n2 Hurejesha kweli ikiwa n1zaidi au sawa n2. n1 -gt n2Hurejesha kweli ikiwa n1 zaidi ya n2. n1 -le n2Hurejesha kweli ikiwa n1chini au sawa n2. n1 -lt n2Hurejesha kweli ikiwa n1 ni chini ya n2. n1 -ne n2Hurejesha kweli ikiwa n1sio sawa n2.
Kwa mfano, hebu tujaribu mojawapo ya waendeshaji kulinganisha. Kumbuka kuwa usemi umefungwa kwenye mabano ya mraba.
#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi
Hivi ndivyo amri hii itatoa.
Ulinganisho wa nambari katika maandishi
Thamani inayobadilika val1zaidi ya 5, tawi huishia kutekelezwa thenOpereta wa kulinganisha na ujumbe unaolingana huonyeshwa kwenye koni.
Ulinganisho wa kamba
Maandishi yanaweza pia kulinganisha maadili ya mfuatano. Waendeshaji wa kulinganisha wanaonekana rahisi sana, lakini shughuli za kulinganisha za kamba zina sifa fulani, ambazo tutagusa hapa chini. Hapa kuna orodha ya waendeshaji.
str1 = str2 Hujaribu mifuatano ili kupata usawa, na kurejesha ukweli ikiwa mifuatano inafanana.
str1 != str2Hurejesha kweli ikiwa mifuatano haifanani. str1 < str2Hurejesha kweli ikiwa str1chini ya str2. str1 > str2 Hurejesha kweli ikiwa str1zaidi ya str2. -n str1 Hurejesha kweli ikiwa urefu str1Juu ya sifuri. -z str1Hurejesha kweli ikiwa urefu str1sawa na sifuri.
Hapa kuna mfano wa kulinganisha kamba kwenye hati:
#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user is the current logged in user"
fi
Kama matokeo ya kutekeleza hati, tunapata zifuatazo.
Kulinganisha mifuatano katika hati
Hapa kuna kipengele kimoja cha kulinganisha kamba ambacho kinafaa kutajwa. Yaani, viendeshaji ">" na "<" lazima viepukwe kwa kurudi nyuma, vinginevyo hati haitafanya kazi ipasavyo, ingawa hakuna ujumbe wa hitilafu utatokea. Hati hutafsiri ">" ishara kama amri ya uelekezaji upya wa pato.
Hivi ndivyo kufanya kazi na waendeshaji hawa inaonekana kama katika nambari:
#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
Hapa kuna matokeo ya hati.
Ulinganisho wa kamba, onyo limetolewa
Tafadhali kumbuka kuwa hati, ingawa imetekelezwa, inatoa onyo:
./myscript: line 5: [: too many arguments
Ili kuondoa onyo hili, tunahitimisha $val2 katika nukuu mbili:
#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
Sasa kila kitu kinafanya kazi kama inavyopaswa.
Ulinganisho wa kamba
Kipengele kingine cha waendeshaji ">" na "<" ni jinsi wanavyofanya kazi na herufi kubwa na ndogo. Ili kuelewa kipengele hiki, hebu tuandae faili ya maandishi yenye maudhui yafuatayo:
Likegeeks
likegeeks
Hebu tuihifadhi kwa kuipa jina myfile, kisha endesha amri ifuatayo kwenye terminal:
sort myfile
Itapanga mistari kutoka kwa faili kama hii:
likegeeks
Likegeeks
Timu sort, kwa chaguo-msingi, hupanga mifuatano kwa mpangilio wa kupanda, yaani, herufi ndogo katika mfano wetu ni ndogo kuliko herufi kubwa. Sasa wacha tuandae hati ambayo italinganisha kamba zile zile:
#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
Ikiwa utaiendesha, inageuka kuwa kila kitu ni kinyume chake - barua ndogo sasa ni kubwa zaidi kuliko ile ya juu.
Amri ya kupanga na kulinganisha mifuatano katika faili ya hati
Katika amri za kulinganisha, herufi kubwa ni ndogo kuliko herufi ndogo. Ulinganisho wa kamba hapa unafanywa kwa kulinganisha nambari za ASCII za wahusika, mpangilio wa mpangilio kwa hivyo unategemea nambari za herufi.
Timu sort, kwa upande wake, hutumia mpangilio wa kupanga uliobainishwa katika mipangilio ya lugha ya mfumo.
Hundi za faili
Labda amri zifuatazo hutumiwa mara nyingi katika hati za bash. Wanakuruhusu kuangalia hali mbalimbali kuhusu faili. Hapa kuna orodha ya amri hizi.
-d fileHuangalia kama faili ipo na ni saraka. -e fileHuangalia ikiwa faili iko. -f file Hukagua kama faili ipo na ni faili. -r fileHukagua ikiwa faili iko na inaweza kusomeka. -s file ΠHukagua kama faili ipo na si tupu. -w fileHukagua ikiwa faili iko na inaweza kuandikwa. -x fileHukagua ikiwa faili iko na inaweza kutekelezwa. file1 -nt file2 Hukagua ikiwa ni mpya zaidi file1Kuliko file2. file1 -ot file2Huangalia ikiwa ni mzee file1Kuliko file2. -O file Hukagua kama faili ipo na inamilikiwa na mtumiaji wa sasa. -G fileHukagua kama faili ipo na kama kitambulisho cha kikundi chake kinalingana na kitambulisho cha kikundi cha mtumiaji wa sasa.
Amri hizi, pamoja na nyingine nyingi zilizojadiliwa leo, ni rahisi kukumbuka. Majina yao, kuwa vifupisho vya maneno mbalimbali, yanaonyesha moja kwa moja hundi wanazofanya.
Wacha tujaribu moja ya amri katika mazoezi:
#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi
Hati hii, kwa saraka iliyopo, itaonyesha yaliyomo.
Kuorodhesha yaliyomo kwenye saraka
Tunaamini kuwa unaweza kujaribu amri zilizobaki mwenyewe; zote zinatumika kulingana na kanuni sawa.
Matokeo ya
Leo tulizungumza juu ya jinsi ya kuanza kuandika maandishi ya bash na kufunika mambo kadhaa ya kimsingi. Kwa kweli, mada ya programu ya bash ni kubwa. Nakala hii ni tafsiri ya sehemu ya kwanza ya safu kubwa ya vifaa 11. Ikiwa ungependa kuendelea sasa hivi, hapa kuna orodha ya asili ya nyenzo hizi. Kwa urahisi, tafsiri ambayo umesoma hivi punde imejumuishwa hapa.
Bash Script Hatua kwa Hatua - hapa tunazungumza juu ya jinsi ya kuanza kuunda maandishi ya bash, matumizi ya anuwai yanazingatiwa, miundo ya masharti, mahesabu, kulinganisha kwa nambari, kamba, na kutafuta habari kuhusu faili zinaelezewa.
Bash Scripting Sehemu ya 3, Vigezo & chaguzi - nyenzo hii imejitolea kwa vigezo vya mstari wa amri na funguo ambazo zinaweza kupitishwa kwa hati, kufanya kazi na data ambayo mtumiaji huingia na ambayo inaweza kusomwa kutoka kwa faili.
Bash Scripting Sehemu ya 4, Ingizo na Pato - hapa tunazungumzia maelezo ya faili na kufanya kazi nao, kuhusu pembejeo, pato, mito ya makosa, na kuhusu uelekezaji wa pato.
Bash Scripting Sehemu ya 11, Tarajia Amri - nyenzo hii imetolewa kwa zana ya Tarajia, ambayo unaweza kutumia otomatiki mwingiliano na huduma zinazoingiliana. Hasa, tunazungumza juu ya maandishi ya kutarajia na mwingiliano wao na maandishi ya bash na programu zingine.
Tunaamini kwamba moja ya vipengele muhimu vya mfululizo huu wa makala ni kwamba, kuanzia rahisi zaidi, yanafaa kwa watumiaji wa ngazi yoyote, hatua kwa hatua inaongoza kwa mada kubwa kabisa, na kutoa kila mtu nafasi ya kuendeleza katika uundaji wa maandishi ya mstari wa amri ya Linux. .
Wasomaji wapendwa! Tunawaomba wakuu wa programu ya bash wazungumze kuhusu jinsi walivyofikia kilele cha umahiri wao, washiriki siri zao, na tunatazamia kupokea maoni kutoka kwa wale ambao wameandika hivi karibuni hati yao ya kwanza.
Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.