Kako stvoriti jednostavne skripte ljuske u Linuxu


Stvaranje skripti ljuske jedna je od najvažnijih vještina koju bi korisnici Linuxa trebali imati na dohvat ruke. Shell skripte igraju ogromnu ulogu u automatizaciji ponavljajućih zadataka koji bi inače bili zamorni izvršavati red po red.

U ovom vodiču ističemo neke od osnovnih operacija skriptiranja ljuske koje bi svaki korisnik Linuxa trebao imati.

1. Napravite jednostavnu skriptu ljuske

Skripta ljuske je datoteka koja sadrži ASCII tekst. Počet ćemo stvaranjem jednostavne skripte ljuske, a za to ćemo koristiti uređivač teksta. Postoji veliki broj uređivača teksta, kako naredbenog retka tako i GUI-a. Za ovaj vodič koristit ćemo vim editor.

Započet ćemo stvaranjem jednostavne skripte koja prikazuje “Hello world” kada se izvrši.

vim hello.sh

Zalijepite sljedeći sadržaj u datoteku i spremite.

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

Idemo preko skripte ljuske red po red.

  • Prvi red – #!/bin/bash – poznat je kao shebang zaglavlje. Ovo je posebna konstrukcija koja označava koji će se program koristiti za tumačenje skripte. U ovom slučaju, ovo će biti bash ljuska označena s /bin/bash. Postoje i drugi skriptni jezici kao što je Python koji je označen s #!/usr/bin/python3 i Perl čije je shebang zaglavlje označeno s #!/usr/bin/perl.
  • Drugi red je komentar. Komentar je izjava koja opisuje što skripta ljuske radi i što se ne izvršava kada se skripta pokrene. Komentarima uvijek prethodi znak # #.
  • Posljednji redak je naredba koja ispisuje poruku ‘Hello World’ na terminalu.

Sljedeći korak je učiniti skriptu izvršnom dodjeljivanjem dopuštenja za izvršenje pomoću naredbe chmod kao što je prikazano.

chmod +x  hello.sh

Na kraju pokrenite skriptu ljuske pomoću jedne od naredbi:

bash hello.sh
OR
./hello.sh

2. Korištenje uvjetnih naredbi za izvršavanje koda

Kao i drugi programski jezici, uvjetne izjave koriste se u bash skriptiranju za donošenje odluka, uz samo male varijacije u sintaksi. Obradit ćemo uvjetne naredbe if, if-else i elif.

Primjer samo naredbe if

Izjava if može se koristiti za testiranje jednog ili više uvjeta. Započet ćemo s osnovnom upotrebom naredbe if za testiranje jednog uvjeta. Izjava if definirana je blokovima if ... fi.

if command
then
  statement
fi

Pogledajmo skriptu ljuske u nastavku.

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

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

Gornja skripta ljuske traži od korisnika da da rezultat koji se zatim pohranjuje u varijabli x. Ako rezultat odgovara 70, skripta vraća rezultat "Dobar posao! ". Operator usporedbe == koristi se za testiranje je li uneseni rezultat, koji je pohranjen u varijabli x, ekvivalentan 100.

Ostali operatori usporedbe koje možete koristiti uključuju:

  • -eq – Jednako
  • -ne – Nije jednako
  • -lt – Manje od
  • -le – Manje od ili jednako
  • -lt – Manje od
  • -ge – Veće od ili jednako

Na primjer, blok if-statement u nastavku ispisuje 'Work Harder' ako je ulazni rezultat bilo koja vrijednost manja od 50.

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

Primjer if-else izjave

Za situacije u kojima imate 2 moguća ishoda: – bilo ovo ili ono – izjava if-else je korisna.

if command
then
  statement1
else
  statement2
fi

Skripta u nastavku čita ulazni rezultat i provjerava je li veći ili jednak 70.

Ako je rezultat veći ili jednak 70, dobit ćete poruku "Odličan posao, prošli ste!". Međutim, ako rezultat padne ispod 70, ispisat će se rezultat 'Nisi uspio'.

#!/bin/bash

echo 'Enter the score'

read x

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

Primjer if-elif-else izjave

U scenarijima gdje postoji više uvjeta i različiti ishodi, koristi se izjava if-elif-else. Ova izjava ima sljedeći format.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Na primjer, imamo skriptu za lutriju koja provjerava je li uneseni broj 90, 60 ili 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. Korištenje naredbe If s logikom I

Možete koristiti naredbu if uz logički operator AND za izvršavanje zadatka ako su zadovoljena dva uvjeta. Operator && koristi se za označavanje logike AND.

#!/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. Korištenje naredbe If s logikom ILI

Kada koristite logiku ILI, koja je predstavljena simbolom ||, bilo koji od uvjeta mora biti zadovoljen sa skriptom da bi dao očekivane rezultate.

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

Koristite konstrukcije petlje

Bash petlje omogućuju korisnicima izvođenje niza zadataka dok se ne postigne određeni rezultat. Ovo je korisno u obavljanju zadataka koji se ponavljaju. U ovom odjeljku ćemo zaviriti u neke od petlji koje možete pronaći i u drugim programskim jezicima.

Dok petlja

Ovo je jedna od petlji s kojom je najlakše raditi. Sintaksa je prilično jednostavna:

while  <some test>
do
 commands
done

Donja petlja while ispisuje sve brojeve od 1 do 10 kada se izvrši.

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

Razgovarajmo o petlji while:

Varijabla counter inicijalizirana je na 1. I dok je varijabla manja ili jednaka 10, vrijednost brojača će se povećavati dok se uvjet ne zadovolji. Redak echo $counter ispisuje sve brojeve od 1 do 10.

Za petlju

Kao i petlja, petlja for koristi se za iterativno izvršavanje koda. tj. ponovite izvršavanje koda što je moguće više puta definirano od strane korisnika.

Sintaksa je:

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

Petlja for u nastavku ponavlja od 1 do 10 i obrađuje njihove vrijednosti na zaslonu.

Bolji način da to postignete je definiranje raspona pomoću dvostrukih vitičastih zagrada { } kao što je prikazano umjesto upisivanja svih brojeva.

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

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

Bash pozicijski parametri

Pozicijski parametar posebna je varijabla na koju se upućuje u skripti kada se vrijednosti prosljeđuju ljusci, ali se ne može dodijeliti. Pozicijski parametri kreću se od $0 $1 $2 $3 …… do $9. Izvan vrijednosti $9, parametri moraju biti zatvoreni u vitičaste zagrade, npr. $ {10}, $ {11} … i tako dalje.

Prilikom izvršavanja skripte, prvi pozicijski parametar koji je $0 preuzima naziv skripte ljuske. Parametar $1 uzima prvu varijablu koja se prosljeđuje na terminalu, $2 uzima drugu, $3 treću i tako dalje.

Kreirajmo skriptu test.sh kao što je prikazano.

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

Zatim izvršite skriptu i navedite ime i prezime kao argumente:

bash test.sh James Kiarie

Iz izlaza možemo vidjeti da je prva varijabla koja se ispisuje naziv skripte ljuske, u ovom slučaju, test.sh. Nakon toga, imena se ispisuju u skladu s pozicijskim parametrima definiranim u skripti ljuske.

Pozicijski parametri korisni su jer vam pomažu prilagoditi podatke koji se unose umjesto eksplicitnog dodjeljivanja vrijednosti varijabli.

Izlazni kodovi naredbi ljuske

Započnimo odgovorom na jednostavno pitanje, Što je izlazni kod?

Svaka naredba koju na ljusci izvrši korisnik ili skripta ljuske ima izlazni status. Izlazni status je cijeli broj.

Izlazni status 0 implicira da je naredba uspješno izvršena bez grešaka. Bilo što između 1 do 255 pokazuje da naredba nije uspjela ili se nije uspješno izvršila.

Da biste pronašli izlazni status naredbe, upotrijebite varijablu Shell $?.

Izlazni status 1 ukazuje na opću pogrešku ili nedopuštene pogreške kao što je uređivanje datoteka bez sudo dopuštenja.

Izlazni status od 2 boda za netočnu upotrebu naredbe ili ugrađene varijable ljuske.

Izlazni status 127 ukazuje na ilegalnu naredbu koja obično daje pogrešku 'naredba nije pronađena'.

Obrada izlaza naredbi ljuske unutar skripte

U bash skriptiranju možete pohraniti izlaz naredbe u varijablu za buduću upotrebu. Ovo se također naziva zamjenom naredbe ljuske i može se postići na sljedeće načine.

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

Na primjer, možete pohraniti naredbu datum u varijablu pod nazivom today i pozvati skriptu ljuske da otkrije trenutni datum.

#!/bin/bash

today=$(date)

echo “Today is $today”

Uzmimo još jedan primjer. Pretpostavimo da želite pronaći važeće korisnike za prijavu na vašem Linux sustavu. Kako biste to učinili? Prvo, popis svih korisnika (i korisnika sustava, procesa i korisnika za prijavu) pohranjuje se u datoteci /etc/passwd.

Da biste vidjeli datoteku, trebali biste upotrijebiti naredbu cat. Međutim, da biste suzili popis korisnika za prijavu, upotrijebite naredbu grep za traženje korisnika s atributom /bin/bash i upotrijebite naredbu cut -c 1-10 kao prikazano za prikaz prvih 10 znakova imena.

Pohranili smo naredbu cat u varijablu 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

Ovo dovodi naš vodič o stvaranju jednostavnih skripti ljuske do kraja. Nadamo se da vam je ovo bilo vrijedno.