TĂ€na rÀÀgime bash-skriptidest. See on â , mis on kirjutatud bash-keskkonnas. On ka teisi keskkondi, nĂ€iteks â zsh, tcsh, ksh, kuid keskendume bashile. See materjal on mĂ”eldud kĂ”igile, kes soovivad, ainus tingimus on oskus töötada Linuxis.
KĂ€suread on kĂ€skude kogumid, mida saab klaviatuurilt sisestada, kogutud failidesse ja ĂŒhendatud mingi ĂŒhise eesmĂ€rgiga. Samas vĂ”ivad kĂ€skude töötamise tulemused olla kas iseseisev vÀÀrtus vĂ”i teenida sisendina teistele kĂ€skudele. Skriptid on vĂ”imas viis sageli korduvate toimingute automatiseerimiseks.
Nii et, kui rÀÀkida kÀsurealt, vÔib kÀske tÀita mitu korraga, sisestades need lÀbi semikooloni:
pwd ; whoami Tegelikult, kui olete seda oma terminaalis proovinud, on teie esimene bash-skript, millel on kaks kĂ€sku, juba kirjutatud. See töötab nii. Esiteks, kĂ€sk pwd vĂ€ljastab ekraanile teavet praeguse töökausta kohta, seejĂ€rel kĂ€sk whoamikannab sĂŒsteemi alloleva kasutaja andmed.
Sarnase lĂ€henemisega saate ĂŒhendada samaaegselt nii palju kĂ€sklusi, kui soovite, piirang on vaid maksimaalne argumentide arv, mida programmile edastada saab. Selle piirangu mÀÀramine on vĂ”imalik jĂ€rgmise kĂ€su abil:
getconf ARG_MAXKÀskude rida on suurepÀrane tööriist, kuid kÀske tuleb sisestada iga kord, kui need on vajalikud. Mis oleks, kui salvestada kÀskude kogum faili ja lihtsalt kutsuda see fail nende tÀitmiseks? Tegelikult on see fail, millest rÀÀgime, kÀskude rida.
Kuidas on bash-skriptid ĂŒles ehitatud
Looge tĂŒhi fail, kasutades kĂ€sku touch. Esimese reana tuleb nĂ€idata, millist lĂ”petust me soovime kasutada. Meid huvitab bash, seega on faili esimene rida jĂ€rgmine:
#!/bin/bash Selle faili teistes ridades tĂ€histab ristikujuline mĂ€rk kommentaare, mida lĂ”petus ei töötle. Siiski on esimene rida erand, siin on ristikujuline mĂ€rk, millele jĂ€rgneb hĂŒĂŒdemĂ€rk (seda jĂ€rjestust nimetatakse ) ja tee bash, nĂ€itavad sĂŒsteemile, et skript on loodud just bash.
KÀskude lÔpetus eraldatakse reavahetuse mÀrgiga, kommentaarid eristatakse ristikujulise mÀrgiga. Nii see vÀlja nÀeb:
#!/bin/bash
# This is a comment
pwd
whoamiSiin, nagu ka kĂ€sureal, on vĂ”imalik kirjutada kĂ€ske ĂŒhel real, eraldades need semikooloniga. Siiski, kui kirjutada kĂ€ske erinevatesse ridadesse, on faili mĂ”ista kergem. Igal juhul töötleb lĂ”petus neid.
Faili skripti Ôiguste seadmine
Salvesta fail, andes sellele nime myscript, ja töö bash-skripti loomise kallal on peaaegu valmis. Praegu on jÀÀnud vaid muuta see fail tÀidetavaks, vastasel juhul, kui proovite seda kÀivitada, leiate endale vea Permission denied.

Skripti faili kÀivitamise katse valede Ôiguste seadistamisega
Teeme failist tÀidetava:
chmod +x .\/myscriptNĂŒĂŒd proovime seda kĂ€ivitada:
.\/myscriptPÀrast Ôiguste seadmist töötab kÔik nagu peab.

Bash-skripti edukas kÀivitamine
SÔnumite vÀljund
Teksti vÀljastamiseks Linuxi konsoolis kasutatakse kÀsku echo. Kasutame seda teadmist ja redigeerime meie skripti, lisades selgitusi andmetele, mida juba olemasolevad kÀsklused vÀljastavad:
#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoamiNii nÀeb vÀlja kÀivitamisejÀrgne uuendatud skript.

SÔnumite vÀljund skriptist
NĂŒĂŒd saame vĂ€ljastada selgitavaid pealkirju, kasutades kĂ€sku echo. Kui te ei tea, kuidas faili redigeerida, kasutades Linuxi, vĂ”i ei ole varem kohtunud kĂ€suga echo, vaadake materjali.
Muude muutujate kasutamine
Muutujad vĂ”imaldavad salvestada skriptifailis teavet, nĂ€iteks â kĂ€skude tulemusi, et kasutada neid teiste kĂ€skude juures.
Ei ole midagi halba, kui tĂ€ita ĂŒksikuid kĂ€ske ilman nende tulemuste salvestamiseta, kuid sellise lĂ€henemise vĂ”imalused on ĂŒsna piiratud.
On kaks tĂŒĂŒpi muutujaid, mida saab kasutada bash-skriptides:
- Keskkonnamuutujad
- Kasutaja mÀÀratud muutujad
Keskkonnamuutujad
MĂ”nikord tuleb shelli kĂ€skudes töötada teatud sĂŒsteemsete andmetega. NĂ€iteks, kuidas trĂŒkkida praeguse kasutaja kodukausta:
#!/bin/bash
# display user home
echo "Home for the current user is: $HOME" Pange tĂ€hele, et me saame kasutada sĂŒsteemset muutujat $HOME kaksikutejutistes, see ei takista sĂŒsteemi selle tuvastamast. Siin on, mis juhtub, kui kĂ€ivitada ĂŒlaltoodud skript.

Keskkonnamuutuja kasutamine skriptis
Ent mis siis, kui soovime ekraanile trĂŒkkida dollarimĂ€rki? Proovime nii:
echo "I have $1 in my pocket" SĂŒsteem tuvastab dollarimĂ€rgi tsiteeritud reas ja arvab, et viidame muutuja vÀÀrtusele. Skript pĂŒĂŒab ekraanile trĂŒkkida mÀÀramata muutuja vÀÀrtuse $1. See ei ole see, mida me vajame. Mida teha?
Sellises olukorras aitab kasutada juhtmÀrk, tagurpidi kaldkriips, dollarimÀrgi ees:
echo "I have $1 in my pocket"NĂŒĂŒd trĂŒkib skript tĂ€pselt seda, mida ootasime.

JuhtmĂ€rkide kasutamine dollarimĂ€rgi trĂŒkkimiseks
Kasutaja mÀÀratud muutujad
Lisaks keskkonnamuutujatele vÔimaldavad bash-skriptid mÀÀrata ja kasutada skriptis ka kasutaja muutujaid. Need muutujad sÀilitavad oma vÀÀrtuse kuni skripti tÀitmine on lÔpetatud.
Nagu sĂŒsteemsete muutujate puhul, saab kasutaja muutujatele viidata dollarimĂ€rgiga:
TNW-CUS-FMP â 10% sooduskupon meie teenustele, mis on saadaval aktiveerimiseks 7 pĂ€eva jooksul
#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"Siin on, mis juhtub pÀrast sellise skripti kÀivitamist.

Kasutaja muutujad skriptis
KĂ€skude asendamine
Ăks bash-skriptide kasulikumaid omadusi on vĂ”imalus vĂ€ljundist teavet vĂ€lja tĂ”mmata ja mÀÀrata see muutujatele, mis vĂ”imaldab selle teabe kasutamist kĂ”ikjal skriptifailis.
Seda saab teha kahel viisil.
- Tagurpidi jutumÀrgi «`» abil
- Konstruktsiooni abil
$()
Esimese lĂ€henemisega veenduge, et ei sisestata tagurpidi jutumĂ€rgi asemel ĂŒhtegi tavalist jutumĂ€rki. KĂ€sk tuleb sulguda kahe sellise mĂ€rgiga:
mydir=`pwd`Teise lÀhenemisega kirjutatakse sama nii:
mydir=$(pwd)Ja skript vÔib lÔppenud kujul 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, jÔuab konsooli.

Skript, mis salvestab kÀsu tulemused muutuja sisse
Matemaatilised toimingud
Matemaatiliste operatsioonide tegemiseks skriptifailis saab kasutada konstruktsiooni nagu $((a+b)):
#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2 
Matemaatilised operatsioonid skriptis
Kontrollstruktuur if-then
MĂ”nes skriptis on vajalik juhtida kĂ€skude juhtimist. NĂ€iteks, kui mingisugune vÀÀrtus on suurem kui viis, tuleb teostada ĂŒks tegevus, vastasel juhul â teine. See on rakendatav paljude olukordade puhul, ning siin aitab meid kontrollstruktuur if-then. Lihtsaim versioon nĂ€eb vĂ€lja nii:
if kÀsk
then
kÀskud
fiSiin on töötav nÀide:
#!/bin/bash
if pwd
then
echo "It works"
fi Antud juhul, kui kÀsk pwdtÀitmine Ônnestub, kuvatakse konsoolis tekst "it works".
Kasutan olemasolevaid teadmisi ja kirjutan keerukama skripti. Oletame, et peame leidma mingi kasutaja /etc/passwd, ja kui seda Ônnestub leida, teavitame, et ta eksisteerib.
#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fiNii nÀeb see vÀlja pÀrast skripti kÀivitamist.

Kasutaja otsimine
Siin kasutasime kÀsku grepkasutaja leidmiseks failis /etc/passwd. Kui kÀsk grepon teile tundmatu, siis selle kirjeldus on saadaval .
Selles nÀites, kui kasutaja leitakse, kuvab skript vastava teate. Aga kui kasutaja leidmine ei Ônnestu? Sellisel juhul lÔpetab skript lihtsalt tÀitmise, teatamata meile sellest. Soovime, et ta meile ka sellest rÀÀgiks, seega tÀiustame koodi.
Kontrollstruktuur if-then-else
Et programm saaks teavitada nii edukatest leidmistest kui ka ebaÔnnestumisest, kasutame konstruktsiooni if-then-else. Nii see toimib:
if kÀsk
then
kÀskud
else
kÀskud
fi Kui esimene kÀsk tagastab nulli, mis tÀhistab selle eduka tÀitmist, osutub tingimus tÔeseks ja tÀitmine ei lÀhe haru muul juhul. Vastupidisel juhul, kui tagastatakse midagi, mis erineb nullist, mis tÀhistab ebaÔnnestumist vÔi vale tulemust, tÀidetakse kÀskud, mis on pÀrast muul juhul.
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 Tema tÀitmine lÀks haru muul juhul.

Skripti kÀivitamine konstruktsiooniga if-then-else
Nii, jĂ€tkame edasi ja kĂŒsime keerulisemate tingimuste kohta. Mida teha, kui on vaja kontrollida mitte ĂŒhte, vaid mitut tingimust? NĂ€iteks, kui vajalik kasutaja on leitud, peaksime kuvama ĂŒhe sĂ”numi, kui lisatingimus on tĂ€idetud â teise sĂ”numi jne. Sarnases olukorras aitavad meid sissetallatud tingimused. See nĂ€eb vĂ€lja selline:
if kÀsk1
then
kÀsklused
elif kÀsk2
then
kÀsklused
fi Kui esimene kÀsk tagastab nulli, mis nÀitab selle eduka tÀitmise, tÀidetakse kÀsklused esimeses plokis. siis, vastasel juhul, kui esimene tingimus osutub vale olevaks, 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 Sarnases skriptis vÔib nÀiteks luua uue kasutaja kÀsklusega useradd, kui otsing ei too tulemusi, vÔi teha midagi muud kasulikku.
Numbrite vÔrdlemine
Skriptides saab vÔrrelda arvulisi vÀÀrtusi. Allpool on loetelu vastavatest kÀsklustest.
n1 -eq n2Tagastab tÔese vÀÀrtuse, kuin1size / bsn2.
n1 -ge n2Tagastab tÔese vÀÀrtuse, kuin1suurem vÔi vÔrdnen2.
n1 -gt n2Tagastab tÔese vÀÀrtuse, kuin1ei nÔuta enamn2.
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.
NĂ€iteks proovime ĂŒhte vĂ”rdlusoperaatorit. Pange tĂ€hele, et vĂ€ljend on sulgudes.
#!/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"
fiSee on, mida see kÀsk kuvab.

Numbrite vÔrdlemine skriptides
Muu muutuja vÀÀrtus val1suurem kui 5, mille tulemusena tÀidetakse vÔrdlusoperaatori haru ja konsooli kuvatakse vastav sÔnum. siisStringide vÔrdlemine
Skeemides saab vĂ”rrelda ka stringivÀÀrtusi. VĂ”rdlusoperaatorid nĂ€evad ĂŒsna lihtsad vĂ€lja, kuid stringide vĂ”rdlemisel on teatud eripĂ€rad, millega me allpool tutvume. Siin on loetelu operaatoritest.
str1 = str2
Kontrollib, kas stringid on vÔrdsed, tagastab tÔeteate, kui stringid on identsed.tr1 != str2
sTagastab tÔeteate, kui stringid ei ole identsed.str1 < str2
Tagastab tÔeteate, kuistr1on vÀiksem kuistr2str1 > str2.
suurem kuistr1on vÀiksem kui-n str1str1 > str2.
Tagastab tÔeteate, kui pikkuson suurem nullist.on vÀiksem kui-z str1
on vÔrdne nulliga.on suurem nullist.on vÀiksem kuiSiin on nÀide stringide vÔrdlemisest skriptis:
Skripti tÀitmise tulemus on jÀrgmine.
#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fiStringide vÔrdlemine skriptides

Skripti stringide vÔrdlemine
Siin on ĂŒks stringide vĂ”rdlemise eripĂ€ra, millest tasub rÀÀkida. Nimelt tuleb operaatorid â>â ja ââ kui vĂ€ljundi suunamise kĂ€sku.
Nii nÀeb nende operaatoritega töötamine 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 töö tulemused.

Stringide vÔrdlemine, vÀljastatud hoiatus
Pange tÀhele, et skript, kuigi see tÀidetakse, vÀljastab hoiatuse:
./myscript: line 5: [: liiga palju argumente Kuna sellest hoiatust lahti saada, paneme $val2 kahe jutumargi vahele:
#!/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.

Skeemides saab vĂ”rrelda ka stringivÀÀrtusi. VĂ”rdlusoperaatorid nĂ€evad ĂŒsna lihtsad vĂ€lja, kuid stringide vĂ”rdlemisel on teatud eripĂ€rad, millega me allpool tutvume. Siin on loetelu operaatoritest.
Veel ĂŒks operaatorite â>â ja â<â eripĂ€ra seisneb selles, kuidas nad töötavad suur- ja vĂ€iketĂ€htedega. Selle eripĂ€ra mĂ”istmiseks valmistan ette tekstifaili sellise sisuga:
Likegeeks
likegeeks Salvestame selle nimega myfile, seejÀrel tÀidame terminalis sellise kÀsu:
sort myfileSee sorteerib faili read jÀrgmiselt:
likegeeks
Likegeeks Meeskond sort, vaikimisi sorteerib read kasvavat. See tĂ€hendab, et vĂ€ike tĂ€ht meie nĂ€ites on vĂ€iksem kui suur tĂ€ht. NĂŒĂŒd valmistame ette skripti, mis vĂ”rdleb samu stringe:
#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fiKui seda kĂ€ivitada, selgub, et kĂ”ik on vastupidi - vĂ€ike tĂ€ht on nĂŒĂŒd suurest tĂ€htest suurem.

KÀsk sort ja stringide vÔrdlemine skripti failis
VĂ”rdluskaaludes on suured tĂ€hed vĂ€ikestest vĂ€iksemad. Stringide vĂ”rdlemine toimub ASCII koodide vĂ”rdlemise kaudu, seega sĂ”ltub sortimisjĂ€rjekord sĂŒmbolite koodidest.
Meeskond sort, omakorda kasutab jĂ€rjestus, mille mÀÀrab sĂŒsteemi keele seaded.
Failide kontrollid
VÔib-olla, allpool toodud kÀsud on bash-skriptides kÔige sagedamini kasutatavad. Need vÔimaldavad kontrollida erinevaid tingimusi, mis puudutavad faile. Siin on nende kÀskude loetelu.
-d fileKontrollib, kas fail eksisteerib ja kas see on kaust.
-e fileKontrollib, kas fail eksisteerib.
-f fileKontrollib, kas fail eksisteerib ja kas see on fail.
-r fileKontrollib, kas fail eksisteerib ja kas sellele on juurdepÀÀs lugemiseks.
-s fileKontrollib, kas fail eksisteerib ja kas see ei ole tĂŒhi.
-w fileKontrollib, kas fail eksisteerib ja kas sellele on juurdepÀÀs kirjutamiseks.
-x fileKontrollib, kas fail eksisteerib ja kas see on tÀidetav.
file1 -nt file2Kontrollib, kas on uuemfile1, kuifile2.
file1 -ot file2Kontrollib, kas on vanemfile1, kuifile2.
-O fileKontrollib, kas fail eksisteerib ja kas selle omanik on praegune kasutaja.
-G fileKontrollib, kas fail eksisteerib ja kas selle grupi identifikaator vastab praeguse kasutaja grupi identifikaatorile.
Need kĂ€sud, nagu paljusid teisi, mida tĂ€na kĂ€sitlesime, on lihtne meeles pidada. Nende nimed, olles lĂŒhendatud erinevatest sĂ”nadest, nĂ€itavad otseselt, milliseid kontrollimisi nad teevad.
Proovi ĂŒks kĂ€sk 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 katalooge jaoks, kuvab selle sisu.

Katalooge sisu vÀljastamine
Oletame, et teiste kÀskudega suudate ise katsetada, kÔik need toimivad sama pÔhimÔtte jÀrgi.
Summary
TÀna rÀÀkisime sellest, kuidas alustada bash-skriptide kirjutamist ja kÀsitlesime mÔningaid pÔhilisi teemasid. Tegelikult on bash-programmeerimise teema tohutu. See artikkel on tÔlge mahuka seeria esimese osa 11 materjalist. Kui soovite jÀtku kohe - siin on nende materjalide originaallinkide nimekiri. Mugavuse huvides on siia ka lisatud see, mille tÔlge on just loetud.
- â selles rÀÀgitakse, kuidas alustada bash-skriptide loomist, kĂ€sitletakse muutujate kasutamist, kirjeldatakse tingimuslikke konstruktsioone, arvutusi, numbrite ja stringide vĂ”rdlemist, kĂŒsimist failide kohta.
- â siin kĂ€sitletakse for ja while tsĂŒklite töö eripĂ€ra.
- â see materjal kĂ€sitleb kĂ€surea parameetreid ja vĂ”tmeid, mis vĂ”ivad skripti edasi minna, samuti andmeid, mida sisestab kasutaja ja mida on vĂ”imalik lugeda failidest.
- â siin rÀÀgitakse failide descriptoritest ja nende kasutamisest, sisendi, vĂ€ljundi ja vigade voogudest, vĂ€ljundi suunamisest.
- â see materjal kĂ€sitleb Linuxi signaale, nende töötlemist skriptides ja skriptide kĂ€ivitamist ajakava jĂ€rgi.
- â siin saab teada, kuidas funktsioonide loomine ja kasutamine skriptides, raamatukogude arendamine.
- â see artikkel kĂ€sitleb voolava tekstiredaktori sed kasutamist.
- â see materjal kĂ€sitleb andmetöötluse keele awk programmeerimist.
- â siin saab lugeda, kuidas kasutada regulaaravaldusi bash-skriptides.
- â siin on toodud meetodeid sĂ”numite töötlemiseks, mida saab kasutajatele saata, samuti meetodeid ketta jĂ€lgimiseks.
- â see materjal kĂ€sitleb Expect'i tööriista, millega saab automatiseerida interaktiivsete utiliitidega suhtlemist. EelkĂ”ige rÀÀgitakse siin expect-skriptidest ja nende koostööst bash-skriptide ja teiste programmide kanssa.
Peame oluliseks, et selle artiklite sarja ĂŒks vÀÀrtuslikimaid omadusi on see, et see alustab kĂ”ige lihtsamast, mis sobib igasuguse tasemega kasutajatele, ja suunab jĂ€rk-jĂ€rgult tĂ”sistele teemadele, andes vĂ”imaluse kĂ”igile, kes soovivad, edusammude saavutamiseks Linuxi kĂ€surea skriptide loomises.
Austatud lugejad! Palume bash-programmeerimise eksperte jagada, kuidas nad saavutasid oma oskustes tipptaseme, jagada saladusi, ja ootame muljeid nendelt, kes just kirjutasid oma esimese skripti.
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Kas tÔlkida teiste artiklite osad?
Jah!
Ei, ei ole vajalik
HÀÀletas 1030 kasutajat. Erakuks jÀi 106 kasutajat.
Allikas: habr.com
