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.