TÀna rÀÀgime bash-skripteest. See on , mis on kirjutatud bash-shellile. On ka teisi shell'e, nagu zsh, tcsh, ksh, kuid keskendume bashile. See materjal on mÔeldud kÔikidele huvilistele, ainus tingimus on oskus töötada Linuxis.
KĂ€skude skriptid on hulk samu kĂ€ske, mida saab klaviatuurilt sisestada, koondatuna failidesse ja ĂŒhendatuna teatud ĂŒhise eesmĂ€rgiga. Nende kĂ€skude töö tulemused vĂ”ivad olla kas iseseisva vÀÀrtusega vĂ”i neid kasutatakse teiste kĂ€skude sisenditena. Skriptid on vĂ”imas viis sagedaste toimingute automatiseerimiseks.
Seega, kui rÀÀkida kÀsureast, vÔimaldab see tÀita mitut kÀsku korraga, sisestades need semikooloniga eraldatuna:
pwd ; whoami Tegelikult, kui olete seda oma terminalis proovinud, on teie esimene bash-skript, kus on kaasatud kaks kĂ€sku, juba kirjutatud. See töötab nii: esmalt kĂ€sk pwd nĂ€itab ekraanil teavet praeguse töödirektori kohta, seejĂ€rel kĂ€sk whoaminĂ€itab teavet selle kasutaja kohta, kelle alla olete sĂŒsteemi sisenenud.
Sellise lĂ€henemisega saate ĂŒhendada niivĂ”rd palju kĂ€ske ĂŒhte ritta, piirangu seadmiseks on vaid maksimaalne argumentide arv, mille saate programmi edastada. See piirang on mÀÀratletud jĂ€rgmise kĂ€suga:
getconf ARG_MAXKÀsklustejada on suurepÀrane tööriist, kuid kÀsud tuleb sisestada iga kord, kui need vajalikud on. Ent mis oleks, kui salvestada hulk kÀske faili ja lihtsalt kutsuda see fail nende tÀitmiseks? TÀpselt seda faili, millest me rÀÀgime, nimetatakse kÀsklustejadaks.
Kuidas on ĂŒles ehitatud bash-skripte
Looge tĂŒhi fail kĂ€su abil touch. Selle esimeses reas tuleb mĂ€rkida, millist kestat me kavatseme kasutada. Meid huvitab bash, seega on faili esimene rida jĂ€rgmine:
#!/bin/bash Selle faili teistes ridades kasutatakse risti sĂŒmbolit kommentaaride tĂ€histamiseks, mis ei lĂ€he lĂ€bi kesta. Siiski on esimene rida eriline juhtum, siin on rist, millele jĂ€rgneb hĂŒĂŒumĂ€rk (sellist jĂ€rjestust nimetatakse ), ja tee bash, ĂŒtlevad sĂŒsteemile, et skript on loodud just bash.
KestakĂ€sud eraldatakse reavahetuse tĂ€hisega, kommentaarid on tĂ€histatud risti sĂŒmboliga. Nii see vĂ€lja nĂ€eb:
#!/bin/bash
# This is a comment
pwd
whoamiSiin, nagu ka kĂ€sureas, saab kĂ€sklusi ĂŒhte ritta kirjutada, eraldades need semikooloniga. Siiski, kui kirjutada kĂ€sklusi erinevatesse ridadesse, on fail kergemini loetav. Igatahes töötleb kest neid.
Skripti faili Ôiguste seadmine
Salvesta fail, andes talle nime myscript, ning töö bash-skripti loomise kallal on peaaegu lĂ”ppenud. NĂŒĂŒd on jÀÀnud veel see fail tĂ€idetavaks muuta, muidu, kui proovite seda kĂ€ivitada, saate tĂ”kke. Permission denied.

Skripti faili kÀivitamise katsed valesti seadistatud Ôiguste korral
Teeme faili tÀidetavaks:
chmod +x ./myscriptNĂŒĂŒd proovime seda tĂ€ita:
./myscriptPÀrast Ôiguste seadmist töötab kÔik nagu peab.

Bash-skripti edukas kÀivitamine
Teate vÀljund
Linuxi konsoolis teksti vÀljundamiseks kasutatakse kÀsku echo. Kasutame seda teadmist ja redigeerime oma skripti, lisades seletusi andmetele, mida olemasolevad kÀsud vÀlja viskavad:
#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoamiNii see vÀlja nÀeb pÀrast uuendatud skripti kÀivitamist.

Skripti sÔnumite vÀljund
NĂŒĂŒd saame kuvada selgitavaid teateid, kasutades kĂ€sku echo. Kui te ei tea, kuidas Linuxi tööriistade abil faili redigeerida vĂ”i pole te kunagi kĂ€suga varem tegelenud, echo, vaadake materjal.
Muuttorud
Muuttorud vÔimaldavad salvestada skripti failis teavet, nÀiteks kÀskude töö tulemused teiste kÀskude kasutamiseks.
Pole midagi halba, kui kĂ€ivitada eraldi kĂ€ske ilma nende tulemusi salvestamata, kuid sellise lĂ€henemise vĂ”imalused on ĂŒsna piiratud.
Bash-skriptides saab kasutada kahte tĂŒĂŒpi muutujaid:
- Keskkonnamuutujad
- Kasutaja muutujaid
Keskkonnamuutujad
MĂ”nikord tuleb kĂ€sureas töötada mingite sĂŒsteemiandmetega. NĂ€iteks siit, kuidas vĂ€ljastada praeguse kasutaja kodukaust:
#!/bin/bash
# display user home
echo "Home for the current user is: $HOME" Pange tĂ€hele, et saame kasutada sĂŒsteemimuutujat $HOME kaheksas tsiteerituna, see ei sega sĂŒsteemi seda tuvastamast. Siin on, mida saadakse eeltoodud skripti tĂ€itmisel.

Keskkonna muutuja kasutamine skripti sees
Aga mis siis, kui tahtma ekraanile dollari sĂŒmbolit nĂ€idata? Proovime nii:
echo "Mul on $1 taskus" SĂŒsteem tuvastab dollari sĂŒmboli tsiteeritud reas ja arvab, et viidatakse olendile. Skript proovib kuvada mÀÀratlemata olendi vÀÀrtust $1. See ei ole see, mida me vajame. Mida teha?
Sellises olukorras aitab tagasi kaldkriipsu kasutamine dollari sĂŒmboli ees:
echo "Mul on $1 taskus"NĂŒĂŒd skript kuvab just seda, mida oodatakse.

Dollari sĂŒmboli kuvamiseks kasutatava juhtmĂ€rgi kasutamine
Kasutaja muutujaid
Lisaks keskkonnaolenditele lubavad bash-skriptid mÀÀrata ja kasutada skriptis ka oma redigeeritavaid olendeid. Tooted sÀilitavad vÀÀrtuse kuni skripti tÀitmine lÔpeb.
Nagu sĂŒsteemiolenditega, saab redigeeritavaid olendeid kasutada dollari sĂŒmboli kaudu:
TNW-CUS-FMP â promo-kood 10% soodustuse saamiseks meie teenustelt, saadaval aktiveeritav 7 pĂ€eva jooksul
#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"Sellise skripti kÀivitamise jÀrel saadav tulemus.

Redigeeritavad olendid skripti jooksul
KĂ€skude asendamine
Ăks bash-skriptide kasulikumaid omadusi on vĂ”imalus vĂ€ljundist teavet vĂ€lja vĂ”tta ja see muutujatele mÀÀrata, mis vĂ”imaldab seda teavet kasutada igal pool skripti failis.
Selle tegemiseks on kaks vÔimalust.
- Kasutades tagurpidi ĂŒlakoma sĂŒmbolit «`»
- Kasutes konstruktsiooni
$()
Esimese lĂ€henemise kasutamisel jĂ€lgige, et te ei kirjutaks tagurpidi ĂŒlakoma asemel tavalist ĂŒlakoma. KĂ€sk tuleb sulgeda kahe sellise sĂŒmboliga:
mydir=`pwd`Teise lÀhenemise korral kirjutatakse sama nii:
mydir=$(pwd)Ja skript vÔib lÔpuks vÀlja nÀha nii:
#!/bin/bash
mydir=$(pwd)
echo $mydir Selle kÀigus salvestatakse kÀsu vÀljund pwdmuutujasse mydir, mille sisu, kasutades kÀsku echo, kuvatakse konsoolis.

Skript, mis salvestab kÀsu tulemused muutujasse
Matemaatilised tehingud
Matemaatiliste tehingute teostamiseks skripti failis saab kasutada sellist konstruktsiooni $((a+b)):
#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2 
Matemaatilised tehingud skriptis
Kontrollstruktuur if-then
MĂ”nes olukorras on vajalik juhtida kĂ€su tĂ€itmise voogu. NĂ€iteks, kui mingi vÀÀrtus on suurem kui viis, tuleb teha ĂŒks tegevus, vastasel juhul â teine. Sarnane lĂ€henemine on rakendatav paljusid olukordades, ja siin aitab meid juhtimisseade. if-then. Lihtsaimal kujul nĂ€eb see vĂ€lja jĂ€rgmiselt:
if kÀsk
then
kÀskud
fiSiin on tööline nÀide:
#!/bin/bash
if pwd
then
echo "It works"
fi Antud juhul, kui kÀsu pwdtÀitmine Ônnestub, kuvatakse konsoolis tekst "it works".
Kasutame olemasolevaid teadmisi ja kirjutame keerulisema stsenaariumi. Ătleme, et tuleb leida mĂ”ni kasutaja /etc/passwd, ja kui leiate ta, teavitada, et ta eksisteerib.
#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fiNii see vÀlja nÀeb pÀrast skripti kÀivitamist.

Kasutaja otsing
Siin kasutasime kÀsku grepkasutaja leidmiseks failist /etc/passwd. Kui kÀsk grepon teile tundmatu, leiate selle kirjelduse .
Selles nÀites, kui kasutajat leiti, kuvab skript vastava teate. Aga kui kasutajat ei leita? Sel juhul lÔpetab skript lihtsalt töö, ilma et meile midagi teataks. Sooviksime, et ta ka sellest rÀÀgiks, seega tÀiustame koodi.
Juhtiv konstruktsioon if-then-else
Et programm saaks teatada nii eduka otsingu kui ka ebaĂ”nnestumise tulemustest, kasutame konstruktsiooni if-then-else. Nii see on ĂŒles ehitatud:
if kÀsk
then
kÀsk
else
kÀsk
fi Kui esimene kÀsk tagastab nulli, mis tÀhistab selle eduka tÀitmise, on tingimus tÔene ja teostamine ei liigu haru muud. Vastupidisel juhul, kui tagastatakse midagi, mis erineb nullist, mis tÀhistab ebaÔnnestumist vÔi vale tulemust, tÀidetakse kÀsud, mis asuvad pÀrast muud.
Kirjutame sellise skripti:
#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesnât exist"
fi Selle tÀitmine lÀks haru muud.

Skripti kÀivitamine konstruktsiooniga if-then-else
Noh, jĂ€tkame edasi ja kĂŒsime keerulisemaid tingimusi. Mis juhtub, kui peame kontrollima mitte ĂŒhte tingimust, vaid mitut? NĂ€iteks, kui vajalik kasutaja leitakse, tuleb kuvada ĂŒks teadet, kui mĂ”ni muu tingimus on tĂ€idetud â veel ĂŒks teadet jne. Sellises olukorras aitavad meil sissevÀÀnatud tingimused. See nĂ€eb vĂ€lja niimoodi:
if ĐșĐŸĐŒĐ°ĐœĐŽĐ°1
then
ĐșĐŸĐŒĐ°ĐœĐŽŃ
elif ĐșĐŸĐŒĐ°ĐœĐŽĐ°2
then
ĐșĐŸĐŒĐ°ĐœĐŽŃ
fi Kui esimene kÀsk tagastab nulli, mis nÀitab, et see on edukalt tÀidetud, siis tÀidetakse kÀsklused esimeses plokis. then, vastasel juhul, kui esimene tingimus osutub vale, ja kui teine kÀsk tagastab nulli, tÀidetakse teise ploki kood.
#!/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 Sellises skriptis saab nÀiteks luua uue kasutaja kÀsuga useradd, kui otsing ei toonud tulemusi, vÔi teha midagi muud kasulikku.
Numbrite vÔrdlemine
Skriptides saab vÔrrelda numbrilisi vÀÀrtusi. Allpool on loetelu vastavatest kÀskudest.
n1 -eq n2Tagastab tÔese vÀÀrtuse, kuin1on vÔrdnen2.
n1 -ge n2Tagastab tÔese vÀÀrtuse, kuin1suurem vÔi vÔrdnen2.
n1 -gt n2Tagastab tÔese vÀÀrtuse, kuin1suuremn2.
n1 -le n2Tagastab tÔese vÀÀrtuse, kuin1vÀiksem vÔi vÔrdnen2.
n1 -lt n2Tagastab tÔese vÀÀrtuse, kui n1 on vÀiksemn2.
n1 -ne n2Tagastab tÔese vÀÀrtuse, kuin1ei ole vÔrdnen2.
VĂ”tame nĂ€iteks ĂŒhe vĂ”rdlusoperaatori. Pange tĂ€hele, et vĂ€ljend on pandud nurksulgudesse.
#!/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"
fiNÀete, mida see kÀsk annab.

Numbrite vÔrdlemine skriptides
Muutuja vÀÀrtus val1on suurem kui 5, seega tÀidetakse oks. thenVÔrdlusoperaatori kohaselt saadetakse vastav sÔnum konsooli.
Stringide vÔrdlemine
Skriptides saab vĂ”rrelda ka stringivÀÀrtusi. VĂ”rdlusoperaatorid nĂ€evad kĂŒllaltki lihtsad vĂ€lja, kuid stringide vĂ”rdlemisel on teatud eripĂ€rad, millega me allpool tutvume. Siin on nimekiri operaatoritest.
str1 = str2Kontrollib stringide vÔrdset, tagastab tÔe, kui stringid on identsed.
sstr1 != str2Tagastab tÔe, kui stringid ei ole identsed.
str1 < str2Tagastab tÔe, kuistr1on vÀiksem kuistr2.
str1 > str2Tagastab tÔe, kuistr1on suurem kuistr2.
-n str1Tagastab tÔe, kui pikkusstr1on suurem nullist.
-z str1Tagastab tÔe, kui pikkusstr1on vÔrdne nulliga.
Siin on nÀide stringide vÔrdlemisest skriptis:
#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fiSkripti tÀitmisel saame jÀrgmise tulemuse.

Stringide vÔrdlemine skriptides
Siin on ĂŒks rida, millest tasub rÀÀkida. Nimelt, operaatorid â>â ja â<â tuleb tagurpidi kaldkriipsuga varjata, vastasel juhul ei tööta skript Ă”igesti, kuigi vigade teadete ei ilmu.
Nii nÀeb need operaatorid vÀlja koodis:
#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fiSiin on skripti tulemused.

Ridade vÔrdlemise, vÀljastatud hoiatus
Pange tÀhele, et skript, kuigi see töötleb, annab hoiatusi:
./myscript: line 5: [: liiga palju argumente Selle hoiatusest vabanemiseks paneme $val2 topelt jutumÀrkidesse:
#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fiNĂŒĂŒd töötab kĂ”ik nagu peab.

Stringide vÔrdlemine
Veel ĂŒks operaatoreid â>â ja â<â puudutav omadus on see, kuidas nad töötavad suurte ja vĂ€ikeste tĂ€htedega. Selle omaduse mĂ”istmiseks valmistame tekstifaili jĂ€rgmise sisuga:
Likegeeks
likegeeks Salvestame selle nimega myfile, pÀrast mida anname terminalis sellise kÀskluse:
sort myfileSee sorteerib faili read jÀrgmistele:
likegeeks
Likegeeks Meeskond sort, vaikimisi jĂ€rjestab read tĂ”usvalt, st vĂ€ike tĂ€ht meie nĂ€ites on suurest tĂ€htsast vĂ€iksem. NĂŒĂŒd valmistame ette skripti, mis vĂ”rdleb samu ridu:
#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fiKui see kĂ€ivitada, selgub, et kĂ”ik on vastupidi â vĂ€ike tĂ€ht on nĂŒĂŒd suurest tĂ€htsast suurem.

KÀsk sort ja ridu vÔrreldes skriptifailis
VĂ”rdlemiseks arvestavad kĂ€skudes suured tĂ€hed vĂ€ikeste tĂ€hedega. Ridade vĂ”rdlemine toimub siin sĂŒmbolite ASCII-koodide pĂ”hjal, seega sĂ”ltub jĂ€rjestus sĂŒmbolite koodidest.
Meeskond sort, omakorda kasutab jĂ€rjestust, mis on mÀÀratud sĂŒsteemi keele seadetes.
Failide kontrollimine
VÔib-olla, alltoodud kÀsud on bash-skriptides kÔige sagedamini kasutatavad. Need vÔimaldavad kontrollida erinevaid failidega seotud tingimusi. Siin on nende kÀskude loetelu.
-d failKontrollib, kas fail eksisteerib ja kas see on kataloog.
-e failKontrollib, kas fail eksisteerib.
-f failKontrollib, kas fail eksisteerib ja kas see on fail.
-r failKontrollib, kas fail eksisteerib ja kas see on lugemiseks saadaval.
-s failKontrollib, kas fail eksisteerib ja ega see ei ole tĂŒhi.
-w failKontrollib, kas fail eksisteerib ja kas see on kirjutamiseks saadaval.
-x failKontrollib, kas fail eksisteerib ja kas see on tÀidetav.
fail1 -nt fail2Kontrollib, kas see on uuemfail1, kuifail2.
fail1 -ot fail2Kontrollib, kas see on vanemfail1, kuifail2.
-O failKontrollib, kas fail eksisteerib ja kas selle omanik on praegune kasutaja.
-G failKontrollib, kas fail eksisteerib ja kas selle grupi ID vastab praeguse kasutaja grupi ID-le.
Need kĂ€sklused, nagu paljud teised, mida tĂ€na kĂ€sitlesime, ei ole keerulised meeles pidada. Nende nimed, olles lĂŒhendatud erinevatest sĂ”nadest, nĂ€itavad selgelt, milliseid kontrolle nad teostavad.
Proovime ĂŒhte kĂ€sku praktikas:
#!/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"
fiSee skript, olemasoleva kausta jaoks, vÀljastab selle sisu.

Kausta sisu vÀljund
Eeldame, et teiste kÀskudega saate ise katsetada, kÔik need kehtivad sama pÔhimÔtte kohaselt.
KokkuvÔte
TĂ€nases artiklis kĂ€sitlesime, kuidas alustada bash-skriptide kirjutamist ja tutvustasime mĂ”ningaid pĂ”hilisi aspekte. Tegelikult on bash-programmeerimise teema tohutu. See artikkel on tĂ”lge suure sarja esimese osa, mis koosneb 11 materjalist. Kui soovite jĂ€tku kohe â siin on nende originaalide nimekiri. Mugavuse huvides on lisatud ka see, mille te just lĂ€bi lugesite.
- â siin rÀÀgitakse sellest, kuidas alustada bash-skriptide loomist, kĂ€sitletakse muutujate kasutamist, kirjeldatakse tingimuslauseid, arvutusi, numbrite ja stringide vĂ”rdlemist, samuti teabe vĂ€ljaselgitamist failide kohta.
- â siin kĂ€sitletakse for- ja while-tsĂŒklite töö eripĂ€rasid.
- â see materjal kĂ€sitleb kĂ€surea parameetreid ja lĂŒliteid, mida saab skriptidele edastada, samuti andmete töötlemist, mida kasutaja sisestab ja mida saab lugeda failidest.
- â siin rÀÀgitakse failide descriptoritest ja neist töötamisest, sisendi-vĂ€ljundi voogudest, vigadest ja vĂ€ljundi suunamisest.
- â see materjal on pĂŒhendatud Linuxi signaalidele, nende töötlemisele skriptides, ajastatud skriptide kĂ€ivitamisele.
- â siit saad teada, kuidas luua ja kasutada funktsioone skriptides ning arendada teeke.
- â see artikkel kĂ€sitleb voogedastusfailide redigeerijat sed.
- â see materjal kĂ€sitleb andmete töötlemise keelt awk.
- â siin saab lugeda regulaaravaldiste kasutamisest bash-skriptides.
- â siin on esitatud tehnikad sĂ”numitega töötamiseks, mida saab kasutajatele saata, samuti kettaseire meetod.
- â see materjal keskendub Expect vahendile, millega saab automatiseerida interaktiivsete utiliididega suhtlemist. EelkĂ”ige kĂ€sitleme siin expect-skripte ja nende koostööd bash-skriptide ja teiste programmidega.
Usume, et selle artiklite sarja ĂŒks vÀÀrtuslikke omadusi on see, et see algab kĂ”ige lihtsamast, mis sobib igasuguse tasemega kasutajatele, ja juhatab jĂ€rk-jĂ€rgult tĂ”sistele teemadele, andes kĂ”igile soovijatele vĂ”imaluse edendada oma oskusi Linuxi kĂ€surea skriptide loomises.
Lugemise teine pool! Palume bash-programmeerimise guru neil rÀÀkida, kuidas nad on saavutanud oma oskuste tipptaseme, jagada saladusi ning ootame muljeid neilt, kes on just kirjutanud oma esimese skripti.
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
TĂ”lkida ĂŒlejÀÀnud artiklite tsĂŒkkel?
Jah!
Ei, ei ole vaja.
HÀÀletas 1030 kasutajat. Kinni 106 kasutajat.
Allikas: habr.com
