Kuidas luua lihtsaid shelliskripte Linuxis
Kestskriptide loomine on üks hädavajalikumaid oskusi, mis Linuxi kasutajatel peaks olema sõrmeotsas. Shell-skriptidel on tohutu roll korduvate ülesannete automatiseerimisel, mis muidu oleks rida rea pealt tüütu.
Selles õpetuses toome välja mõned põhilised shelliskriptimise toimingud, mis peaksid olema igal Linuxi kasutajal.
1. Looge lihtne shelliskript
Kestskript on fail, mis sisaldab ASCII teksti. Alustame lihtsa shelliskripti loomisega ja selleks kasutame tekstiredaktorit. Vimiredaktorit on üsna palju.
Alustame lihtsa skripti loomisega, mis kuvab käivitamisel "Hello world".
$ vim hello.sh
Kleepige järgmine sisu faili ja salvestage.
#!/bin/bash # Print Hello world message echo "Hello World!"
Läheme kesta skripti ridade kaupa üle.
- Esimene rida -
#!/bin/bash
- on tuntud kui shebangi päis. See on spetsiaalne konstruktsioon, mis näitab, millist programmi skripti tõlgendamiseks kasutatakse. Sel juhul on see bashi kest, mida tähistab/bin/bash. On ka teisi skriptikeeli, näiteks Python, mida tähistatakse#!/Usr/bin/python3
ja Perl, mille shebangi päis on, tähistab#!/Usr/bin/perl
. - Teine rida on kommentaar. Kommentaar on avaldus, mis kirjeldab, mida shelliskript teeb, ja seda skripti käivitamisel ei käivitata. Kommentaaride ees on alati räsimärk
#
. - Viimane rida on käsk, mis prindib terminali sõnumi “Tere maailm”.
Järgmine samm on muuta skript käivitatavaks, määrates täitmisõiguse käsu chmod abil, nagu näidatud.
$ chmod +x hello.sh
Lõpuks käivitage shelliskript, kasutades mõnda käsku:
$ bash hello.sh OR $ ./hello.sh
2. Tingimuslausete kasutamine koodi täitmiseks
Sarnaselt teistele programmeerimiskeeltele kasutatakse ka bashi skriptides otsuste tegemiseks tingimuslikke lauseid, süntaksi muutus on vaid väike. Vaatleme tingimuslauset if, if-else ja elif.
If-lauset saab kasutada ühe või mitme tingimuse testimiseks. Alustame if-lause põhimõttelisest kasutamisest ühe tingimuse testimiseks. If-lause on määratletud plokkidega if ... fi
.
if command then statement fi
Vaatame allpool olevat shelliskripti.
#!/bin/bash echo 'Enter the score' read x if [[ $x == 70 ]]; then echo 'Good job!' fi
Ülaltoodud shelliskript palub kasutajal anda punktisumma, mis seejärel salvestatakse muutujasse x. Kui skoor vastab 70-le, tagastab skript väljundi “Hea töö!”. Võrdlusoperaatorit ==
kasutatakse selle testimiseks, kas sisestatud tulemus, mis on salvestatud muutujasse x, on võrdne 100-ga.
Muude võrdlusoperaatorite hulka kuuluvad:
-
-eq
- võrdne -
-ne
- pole võrdne -
-lt
- vähem kui -
-le
- väiksem või võrdne -
-lt
- vähem kui -
-ge
- suurem kui või võrdne
Näiteks prinditakse allpool olev lause if-lause välja „Töö raskem”, kui sisendkoori väärtus on väiksem kui 50.
if [[ $x -lt 50 ]]; then echo 'Work Harder!' fi
Olukordades, kus teil on 2 võimalikku tulemust: - kas see või teine - tuleb kasuks lause if-else.
if command then statement1 else statement2 fi
Allpool olev skript loeb sisendi skoori ja kontrollib, kas see on suurem või võrdne 70-ga.
Kui skoor on suurem või võrdne 70-ga, saate teate „Suurepärane töö, sa läbisid!”. Kui tulemus langeb alla 70, prinditakse väljund ‘Sa ebaõnnestus’.
#!/bin/bash echo 'Enter the score' read x if [[ $x -ge 70 ]]; then echo 'Great job, You passed!' else echo 'You failed' fi
Stsenaariumites, kus on mitu tingimust ja erinevad tulemused, kasutatakse lauset if-elif-else. Selle avalduse vorming on järgmine.
if condition1 then statement1 elif condition2 then statement2 else statement3 fi
Näiteks on meil loterii skript, mis kontrollib, kas sisestatud number on 90, 60 või 30.
#!/bin/bash echo 'Enter the score' read x if [[ $x -eq 90 ]]; then echo “You have won the First Prize” elif [[ $x -eq 60 ]]; then echo “You have won the Second Prize” elif [[ $x -eq 30 ]]; then echo “You have won the Second Prize” else echo “Please try again” fi
3. If-lause kasutamine AND-loogikaga
Kui kaks tingimust on täidetud, saate ülesande täitmiseks kasutada lauset if loogikaoperaatori AND kõrval. Operaatorit &&
kasutatakse JA-loogika tähistamiseks.
#!/bin/bash echo 'Please Enter your user_id' read user_id echo 'Please Enter your tag_no' read tag_id if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]]; then echo “Login successful” else echo “Login failure” fi
5. If-lause kasutamine koos OR-loogikaga
OR-loogika kasutamisel, mida tähistab sümbol ||
, peab oodatud tulemuse saamiseks skriptiga vastama üks neist tingimustest.
#!/bin/bash echo 'Please enter a random number' read number if [[ (number -eq 55 || number -eq 80) ]]; then echo 'Congratulations! You’ve won' else echo 'Sorry, try again' fi
Kasutage aasade ehitamist
Bash-silmused võimaldavad kasutajatel täita rea ülesandeid kuni teatud tulemuse saavutamiseni. See tuleb kasuks korduvate ülesannete täitmisel. Selles jaotises tutvume mõningate silmustega, mida leiate ka teistest programmeerimiskeeltest.
See on üks lihtsamaid silmusid, millega töötada. Süntaks on üsna lihtne:
while <some test> do commands done
Allpool olev silmus while loetleb käivitamisel kõik numbrid vahemikus 1–10.
#!/bin/bash # A simple while loop counter=1 while [ $counter -le 10 ] do echo $counter ((counter++)) done
Lahutagem samal ajal silmust:
Muutuja loendur lähtestatakse väärtusele 1. Ja kui muutuja on väiksem või võrdne 10, suureneb loenduri väärtus seni, kuni tingimus on täidetud. Rea echo $loendur prindib kõik numbrid vahemikus 1 kuni 10.
Sarnaselt while-silmusega kasutatakse koodi kordamiseks ka for-loop-i. St. korrake koodi täitmist nii mitu korda kui kasutaja on määranud.
Süntaks on:
for var in 1 2 3 4 5 N do command1 command2 done
Allpool olev silmus for iteratsioon läbi 1 kuni 10 ja töötleb nende väärtusi ekraanil.
Parem viis selle saavutamiseks on vahemiku määratlemine kõigi numbrite sisestamise asemel kahekordsete lokkisulgudega {}
, nagu näidatud.
#!/bin/bash # Specify range in a for loop for num in {1..10} do echo $num done
Bashi positsiooniparameetrid
Positsiooniparameeter on spetsiaalne muutuja, millele viidatakse skriptis, kui väärtused edastatakse kestale, kuid seda ei saa määrata. Asukohaparameetrid jäävad vahemikku $0 $1 $2 $3 …… kuni $9. Peale väärtuse 9 USD peavad parameetrid olema suletud sulgudes, nt & # 36 {10}, & # 36 {11} ... ja nii edasi.
Skripti käivitamisel võtab esimene positsiooniparameeter, milleks on $0, shelliskripti nime. Parameeter $1 võtab esimese terminalis edastatud muutuja, $2 teise, $3 kolmanda ja nii edasi.
Koostame skripti test.sh nagu näidatud.
#!/bin/bash echo "The name of the script is: " $0 echo "My first name is: " $1 echo "My second name is: " $2
Järgmisena käivitage skript ja esitage argumentidena esimene ja teine nimi:
# bash test.sh James Kiarie
Väljundist näeme, et esimene prinditav muutuja on shelliskripti nimi, antud juhul test.sh. Seejärel prinditakse nimed vastavalt shelliskriptis määratletud asukoha parameetritele.
Asukohaparameetrid on kasulikud selle poolest, et need aitavad teil muutujale väärtuse selgesõnalise määramise asemel sisestatavaid andmeid kohandada.
Shelli käskude väljumise koodid
Alustuseks vastame lihtsale küsimusele, mis on väljumiskood?
Igal kasutajal või shelliskriptil shellil täidetud käsul on väljumisolek. Väljumise olek on täisarv.
Väljumise olek 0 tähendab, et käsk täideti edukalt ilma vigadeta. Kõik vahemikus 1 kuni 255 näitab, et käsk ebaõnnestus või seda ei õnnestunud edukalt täita.
Käsu väljumise oleku leidmiseks kasutage muutujat $?
Shell.
Väljumise olek 1 viitab üldisele veale või lubamatutele vigadele, näiteks sudo-õigusteta failide redigeerimine.
2 väljumisolek osutab käsu või sisseehitatud shellimuutuja valele kasutamisele.
127 väljumisolek näitab ebaseaduslikku käsku, mis tavaliselt annab vea „käsku ei leitud”.
Shelli käskude väljundi töötlemine skripti sees
Bashi skriptides saate käsu väljundi tulevikus muutujaks salvestada. Seda nimetatakse ka shellikäskude asendamiseks ja seda saab saavutada järgmistel viisidel.
variable=$(command) OR variable=$(/path/to/command) OR variable=$(command argument 1 argument 2 ...)
Näiteks võite käsu kuupäev salvestada muutusesse, mida nimetatakse täna, ja praeguse kuupäeva paljastamiseks helistada shelliskriptile.
#!/bin/bash today=$(date) echo “Today is $today”
Võtame veel ühe näite. Oletame, et soovite oma Linuxi süsteemist leida kehtivad sisselogimise kasutajad. Kuidas sa sellega läheksid? Esiteks, kõigi kasutajate (nii süsteemi, protsessi kui ka sisselogimise kasutajate) loend salvestatakse faili/etc/passwd.
Faili vaatamiseks peate atribuudiga/bin/bash kasutajate otsimiseks kasutama käsku grep ja nimede esimese 10 tähemärgi kuvamiseks kasutage käsku cut -c 1-10, nagu näidatud.
Oleme käsu kass salvestanud muutujaks login_users.
#!/bin/bash login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10) echo 'This is the list of login users: echo $login_users
See lõpetab meie õpetuse lihtsate shelliskriptide loomiseks. Loodame, et leidsite selle väärtuslikuks.