Kaip sukurti paprastus apvalkalo scenarijus sistemoje „Linux“.


Apvalkalo scenarijų kūrimas yra vienas iš svarbiausių įgūdžių, kuriuos „Linux“ naudotojai turėtų turėti tiesiog pirštų galiukais. „Shell“ scenarijai atlieka didžiulį vaidmenį automatizuojant pasikartojančias užduotis, kurios priešingu atveju būtų varginančios eilutę po eilutės.

Šiame vadove pabrėžiame kai kurias pagrindines apvalkalo scenarijų sudarymo operacijas, kurias turėtų turėti kiekvienas Linux vartotojas.

1. Sukurkite paprastą apvalkalo scenarijų

Apvalkalo scenarijus yra failas, kurį sudaro ASCII tekstas. Pradėsime kurdami paprastą apvalkalo scenarijų, o tam naudosime teksto rengyklę. Yra nemažai teksto redaktorių, tiek komandinės eilutės, tiek GUI pagrindu. Šiam vadovui naudosime vim redaktorių.

Pradėsime kurdami paprastą scenarijų, kurį vykdant bus rodoma „Hello world“.

vim hello.sh

Įklijuokite šį turinį į failą ir išsaugokite.

#!/bin/bash
Print Hello world message
echo "Hello World!"

Pereikime prie apvalkalo scenarijaus eilutę po eilutės.

  • Pirmoji eilutė – #!/bin/bash – žinoma kaip shebang antraštė. Tai speciali konstrukcija, nurodanti, kokia programa bus naudojama scenarijui interpretuoti. Šiuo atveju tai bus bash apvalkalas, pažymėtas /bin/bash. Yra ir kitų scenarijų kalbų, pvz., Python, kuri žymima #!/usr/bin/python3 ir Perl, kurios shebang antraštė žymima #!/usr/bin/perl.
  • Antra eilutė yra komentaras. Komentaras yra teiginys, aprašantis, ką veikia apvalkalo scenarijus ir kuris nevykdomas paleidžiant scenarijų. Prieš komentarus visada rašomas maišos ženklas #.
  • Paskutinė eilutė yra komanda, kuri terminale išspausdina pranešimą „Sveikas pasaulis“.

Kitas veiksmas – paversti scenarijų vykdytinu priskiriant vykdymo leidimą naudojant komandą chmod, kaip parodyta.

chmod +x  hello.sh

Galiausiai paleiskite apvalkalo scenarijų naudodami vieną iš komandų:

bash hello.sh
OR
./hello.sh

2. Sąlyginių teiginių naudojimas kodui vykdyti

Kaip ir kitos programavimo kalbos, sąlyginiai teiginiai naudojami bash scenarijuose sprendimams priimti, tačiau sintaksė šiek tiek skiriasi. Apžvelgsime sąlyginius teiginius if, if-else ir elif.

Tik jei pareiškimo pavyzdys

Teiginys if gali būti naudojamas norint patikrinti vieną ar kelias sąlygas. Pradėsime nuo pagrindinio teiginio if naudojimo, kad patikrintume vieną sąlygą. Teiginys if apibrėžiamas if ... fi blokais.

if command
then
  statement
fi

Pažvelkime į toliau pateiktą apvalkalo scenarijų.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

Aukščiau pateiktas apvalkalo scenarijus ragina vartotoją pateikti balą, kuris išsaugomas kintamajame x. Jei rezultatas atitinka 70, scenarijus pateikia išvestį „Geras darbas!“. Palyginimo operatorius == naudojamas patikrinti, ar įvestas balas, saugomas kintamajame x, atitinka 100.

Kiti palyginimo operatoriai, kuriuos galite naudoti, yra šie:

  • -eq – lygus
  • -ne – nelygu
  • -lt – Mažiau nei
  • -le – mažesnis arba lygus
  • -lt – Mažiau nei
  • -ge – didesnis arba lygus

Pavyzdžiui, toliau pateiktame if-teiginio bloke išspausdinama „Dirbti sunkiau“, jei įvesties balas yra bet kokia vertė, mažesnė nei 50.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

Jei-else teiginio pavyzdys

Tais atvejais, kai turite 2 galimus rezultatus: – ar tas, ar anas – pravers teiginys „jei kitaip“.

if command
then
  statement1
else
  statement2
fi

Toliau pateikiamas scenarijus nuskaito įvesties balą ir patikrina, ar jis didesnis arba lygus 70.

Jei balas didesnis arba lygus 70, gausite pranešimą Puikus darbas, išlaikėte!. Tačiau, jei rezultatas nukrenta žemiau 70, bus išspausdinta išvada „Jums nepavyko“.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

Jei-elif-kitas teiginio pavyzdys

Tais atvejais, kai yra kelios sąlygos ir skirtingi rezultatai, naudojamas teiginys if-elif-else. Šis pareiškimas pateikiamas tokiu formatu.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Pavyzdžiui, turime loterijos scenarijų, kuris patikrina, ar įvestas skaičius yra 90, 60 ar 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 teiginio naudojimas su AND logika

Galite naudoti teiginį if kartu su loginiu operatoriumi IR, kad atliktumėte užduotį, jei tenkinamos dvi sąlygos. Operatorius && naudojamas IR logikai pažymėti.

#!/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 teiginio naudojimas su OR logika

Kai naudojate ARBA logiką, kuri pavaizduota simboliu ||, norint gauti laukiamų rezultatų, scenarijus turi atitikti bet kurią iš sąlygų.

#!/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

Naudokite kilpos konstrukcijas

„Bash“ kilpos leidžia vartotojams atlikti daugybę užduočių, kol pasiekiamas tam tikras rezultatas. Tai praverčia atliekant pasikartojančias užduotis. Šiame skyriuje apžvelgsime kai kurias kilpas, kurias taip pat rasite kitose programavimo kalbose.

Nors kilpa

Tai viena iš lengviausiai naudojamų kilpų. Sintaksė gana paprasta:

while  <some test>
do
 commands
done

Žemiau esančioje while kilpoje pateikiami visi skaičiai nuo 1 iki 10, kai jis vykdomas.

#!/bin/bash
A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

Pakalbėkime apie while kilpą:

Kintamasis skaitiklis inicijuojamas į 1. Ir nors kintamasis yra mažesnis arba lygus 10, skaitiklio reikšmė bus didinama, kol bus įvykdyta sąlyga. Eilutėje echo $counter spausdinami visi skaičiai nuo 1 iki 10.

Už kilpą

Kaip ir while ciklas, for ciklas naudojamas kodui vykdyti iteratyviai. T.y. kartoti kodo vykdymą tiek kartų, kiek įmanoma, kaip nurodė vartotojas.

Sintaksė yra tokia:

for var in 1 2 3 4 5 N
do
 command1
 command2
done

Toliau pateikiamas ciklas for kartojamas nuo 1 iki 10 ir apdoroja jų vertes ekrane.

Geresnis būdas tai pasiekti yra apibrėžti diapazoną naudojant dvigubus riestinius skliaustus { }, kaip parodyta, o ne įvesti visus skaičius.

#!/bin/bash
Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Bash padėties parametrai

Padėties parametras yra specialus kintamasis, kuris nurodomas scenarijuje, kai reikšmės perduodamos apvalkale, bet negali būti priskirtos. Pozicijos parametrai yra nuo $0 $1 $2 $3 …… iki $9. Be $9 vertės, parametrai turi būti pateikti skliausteliuose, pvz., $ {10}, $ {11} … ir pan.

Vykdant scenarijų, pirmasis padėties parametras, kuris yra $0, įgauna apvalkalo scenarijaus pavadinimą. Parametras $1 paima pirmąjį terminale perduodamą kintamąjį, $2 – antrą, $3 – trečią ir pan.

Sukurkime scenarijų test.sh, kaip parodyta.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

Tada paleiskite scenarijų ir nurodykite pirmąjį ir antrąjį pavadinimą kaip argumentus:

bash test.sh James Kiarie

Iš išvesties matome, kad pirmasis išspausdintas kintamasis yra apvalkalo scenarijaus pavadinimas, šiuo atveju test.sh. Po to pavadinimai išspausdinami pagal padėties parametrus, apibrėžtus apvalkalo scenarijuje.

Padėties parametrai yra naudingi tuo, kad padeda tinkinti įvedamus duomenis, o ne aiškiai priskirti kintamajam reikšmę.

„Shell“ komandų išėjimo kodai

Pradėkime nuo atsakymo į paprastą klausimą: kas yra išėjimo kodas?

Kiekviena komanda, kurią apvalkale įvykdo vartotojas arba apvalkalo scenarijus, turi išėjimo būseną. Išėjimo būsena yra sveikasis skaičius.

Išėjimo būsena 0 reiškia, kad komanda buvo sėkmingai įvykdyta be klaidų. Viskas nuo 1 iki 255 rodo, kad komanda nepavyko arba nebuvo sėkmingai įvykdyta.

Norėdami sužinoti komandos išėjimo būseną, naudokite apvalkalo kintamąjį $?.

1 išėjimo būsena nurodo bendrą klaidą arba bet kokias neleistinas klaidas, pvz., failų redagavimą be sudo leidimų.

2 taškų išėjimo būsena už netinkamą komandos arba integruoto apvalkalo kintamojo naudojimą.

127 išėjimo būsena nurodo neteisėtą komandą, kuri paprastai pateikia klaidą „Komanda nerasta“.

Shell komandų išvesties apdorojimas scenarijuje

Bash scenarijuose galite išsaugoti komandos išvestį kintamajame, kad galėtumėte naudoti ateityje. Tai taip pat vadinama apvalkalo komandų pakeitimu ir gali būti pasiekta šiais būdais.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Pavyzdžiui, galite išsaugoti komandą data kintamajame pavadinimu today ir iškviesti apvalkalo scenarijų, kad atskleistumėte dabartinę datą.

#!/bin/bash

today=$(date)

echo “Today is $today”

Paimkime kitą pavyzdį. Tarkime, kad norite rasti galiojančius prisijungimo vartotojus savo Linux sistemoje. Kaip elgtumėtės? Pirma, visų vartotojų (tiek sistemos, tiek proceso, tiek prisijungimo naudotojų) sąrašas saugomas /etc/passwd faile.

Norėdami peržiūrėti failą, turėsite naudoti komandą cat. Tačiau norėdami susiaurinti naudotojų prisijungimą, naudokite komandą grep, kad ieškotumėte vartotojų su atributu /bin/bash ir naudokite komandą cut -c 1-10 kaip parodyta, kad būtų rodomi pirmieji 10 vardų simbolių.

Išsaugojome komandą cat kintamajame 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

Taip mūsų pamoka apie paprastų apvalkalo scenarijų kūrimą baigiasi. Tikimės, kad jums tai buvo vertinga.