Kā izveidot vienkāršus čaulas skriptus Linux


Shell skriptu izveide ir viena no būtiskākajām prasmēm, kas Linux lietotājiem vajadzētu būt pirkstu galā. Shell skriptiem ir milzīga loma atkārtotu uzdevumu automatizēšanā, kas citādi būtu garlaicīga izpilde pa rindai.

Šajā apmācībā mēs izceļam dažas galvenās čaulas skriptu operācijas, kas jāveic katram Linux lietotājam.

1. Izveidojiet vienkāršu čaulas skriptu

Apvalka skripts ir fails, kas satur ASCII tekstu. Mēs sāksim izveidot vienkāršu apvalka skriptu, un, lai to izdarītu, mēs izmantosim teksta redaktoru. Vim redaktoru ir diezgan daudz.

Mēs sāksim, izveidojot vienkāršu skriptu, kurā izpildot tiek parādīts “Hello world”.

$ vim hello.sh

Ielīmējiet failā šo saturu un saglabājiet.

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

Pārejam pa čaulas skriptu pa rindai.

  • Pirmā rinda - #!/bin/bash - ir pazīstama kā shebang galvene. Šī ir īpaša konstrukcija, kas norāda, kāda programma tiks izmantota skripta interpretācijai. Šajā gadījumā tas būs bash apvalks, ko norāda/bin/bash. Ir arī citas skriptu valodas, piemēram, Python, ko apzīmē ar #!/Usr/bin/python3 , un Perl, kura shebang galvene ir, apzīmē ar #!/Usr/bin/perl .
  • Otrā rindiņa ir komentārs. Komentārs ir paziņojums, kas apraksta apvalka skripta darbību un netiek izpildīts, kad skripts tiek palaists. Pirms komentāriem vienmēr ir jaukšanas zīme # .
  • Pēdējā rinda ir komanda, kas terminālā izdrukā ziņojumu “Hello World”.

Nākamais solis ir padarīt skriptu izpildāmu, piešķirot izpildes atļauju, izmantojot komandu chmod, kā parādīts.

$ chmod +x  hello.sh

Visbeidzot, palaidiet čaulas skriptu, izmantojot kādu no komandām:

$ bash hello.sh
OR
$ ./hello.sh

2. Nosacījuma paziņojumu izmantošana koda izpildei

Tāpat kā citas programmēšanas valodas, nosacījumu paziņojumi tiek izmantoti bash skriptu veidošanā, lai pieņemtu lēmumus, tikai nedaudz mainot sintaksi. Mēs aplūkosim nosacījuma paziņojumus if, if-else un elif.

Ja paziņojumu var izmantot, lai pārbaudītu vienu vai vairākus nosacījumus. Mēs sāksim ar fundamentālu if apgalvojuma izmantošanu, lai pārbaudītu vienu nosacījumu. Ja paziņojumu definē bloki if ... fi .

if command
then
  statement
fi

Apskatīsim zemāk redzamo čaulas skriptu.

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

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

Iepriekš minētais čaulas skripts liek lietotājam norādīt rezultātu, kas pēc tam tiek saglabāts mainīgajā x. Ja rezultāts atbilst 70, skripts atgriež rezultātu “Labs darbs!”. Salīdzināšanas operators == tiek izmantots, lai pārbaudītu, vai ievadītais rādītājs, kas tiek saglabāts mainīgajā x, ir līdzvērtīgs 100.

Citi salīdzināšanas operatori, kurus varat izmantot, ir:

  • -eq - vienāds ar
  • -ne - nav vienāds ar
  • -lt - mazāk nekā
  • -le - mazāks vai vienāds ar
  • -lt - mazāk nekā
  • -ge - lielāks vai vienāds ar

Piemēram, zemāk esošajā if-paziņojuma blokā tiek izdrukāts ‘Work Harder’, ja ievades rādītāja vērtība ir mazāka par 50.

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

Situācijām, kad jums ir 2 iespējamie rezultāti: - vai tas, vai tas - noderēs paziņojums “ja-cits”.

if command
then
  statement1
else
  statement2
fi

Zemāk esošais skripts nolasa ievades rezultātu un pārbauda, vai tas ir lielāks vai vienāds ar 70.

Ja rezultāts ir lielāks vai vienāds ar 70, jūs saņemat ziņojumu “Lielisks darbs, jūs izturējāt!”. Tomēr, ja rezultāts nokrītas zem 70, tiek izdrukāta izeja ‘Jums neizdevās’.

#!/bin/bash

echo 'Enter the score'

read x

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

Gadījumos, kad ir vairāki nosacījumi un dažādi rezultāti, tiek izmantots priekšraksts if-elif-else. Šim paziņojumam ir šāds formāts.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Piemēram, mums ir loterijas skripts, kas pārbauda, vai ievadītais skaitlis ir 90, 60 vai 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. Izmantojot If Statement ar AND Logic

Lai izpildītu uzdevumu, ja ir izpildīti divi nosacījumi, varat izmantot if paziņojumu kopā ar loģikas operatoru UN Operators && tiek izmantots, lai apzīmētu UN loģiku.

#!/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 paziņojuma izmantošana ar OR Logic

Izmantojot OR loģiku, ko attēlo simbols || , lai sniegtu gaidītos rezultātus, skriptam ir jābūt izpildītam vienam no nosacījumiem.

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

Izmantojiet cilpu konstrukcijas

Bash cilpas ļauj lietotājiem veikt virkni uzdevumu, līdz tiek sasniegts noteikts rezultāts. Tas ir noderīgi, veicot atkārtotus uzdevumus. Šajā sadaļā mēs apskatīsim dažas cilpas, kuras jūs atradīsit arī citās programmēšanas valodās.

Šī ir viena no vienkāršākajām cilpām, ar kuru strādāt. Sintakse ir diezgan vienkārša:

while  <some test>
do
 commands
done

Zemāk esošajā cilnē while visi izpildītie skaitļi ir no 1 līdz 10.

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

Apspriedīsim laiku:

Mainīgo skaitītājs tiek inicializēts uz 1. Un, kamēr mainīgais ir mazāks vai vienāds ar 10, skaitītāja vērtība tiks palielināta, līdz nosacījums būs izpildīts. Līnijas atbalss $skaitītājs izdrukā visus skaitļus no 1 līdz 10.

Tāpat kā cilpa while, arī koda izpildīšanai iteratīvi tiek izmantota for for loop. T.i. atkārtojiet koda izpildi pēc iespējas vairāk reižu, ko nosaka lietotājs.

Sintakse ir:

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

For cilpa zemāk atkārto caur 1 no 10 līdz 10 un apstrādā to vērtības ekrānā.

Labāks veids, kā to panākt, ir definēt diapazonu, izmantojot dubultās cirtainās iekavas {} , kā parādīts, nevis rakstīt visus ciparus.

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

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

Bash pozīcijas parametri

Pozicionālais parametrs ir īpašs mainīgais, uz kuru skriptā ir atsauce, kad vērtības tiek nodotas čaulai, bet to nevar piešķirt. Pozicionēšanas parametri svārstās no $0 $1 $2 $3 …… līdz 9 USD. Pārsniedzot vērtību 9 USD, parametri jāiekļauj cirtainās iekavās, piemēram, & # 36 {10}, & # 36 {11} ... un tā tālāk.

Izpildot skriptu, pirmais pozicionālais parametrs, kas ir $0, uzņem čaulas skripta nosaukumu. Parametrs $1 ņem pirmo mainīgo, kas tiek nodots terminālim, $2 ņem otro, $3 trešo un tā tālāk.

Izveidosim skripta test.sh, kā parādīts.

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

Pēc tam izpildiet skriptu un kā argumentus norādiet pirmo un otro vārdu:

# bash test.sh James Kiarie

Pēc izejas mēs varam redzēt, ka pirmais mainīgais, kas tiek izdrukāts, ir čaulas skripta nosaukums, šajā gadījumā test.sh. Pēc tam nosaukumi tiek izdrukāti atbilstoši korpusa skriptā definētajiem pozīcijas parametriem.

Pozicionālie parametri ir noderīgi, jo tie palīdz jums pielāgot ievadītos datus, nevis skaidri piešķirt mainīgajam vērtību.

Shell komandu izejas kodi

Sāksim ar atbildi uz vienkāršu jautājumu: Kas ir izejas kods?

Katrai komandai, ko čaulā izpilda lietotājs vai čaulas skripts, ir izejas statuss. Izejas statuss ir vesels skaitlis.

0 izejas statuss nozīmē, ka komanda ir veiksmīgi izpildīta bez kļūdām. Viss no 1 līdz 255 parāda, ka komanda neizdevās vai netika veiksmīgi izpildīta.

Lai atrastu komandas izejas statusu, izmantojiet mainīgo $? Shell.

Izejas statuss 1 norāda uz vispārēju kļūdu vai pieļaujamām kļūdām, piemēram, failu rediģēšanu bez sudo atļaujām.

2 izejas statuss norāda uz nepareizu komandas vai iebūvēta čaulas mainīgā izmantošanu.

127 izejas statuss norāda uz nelikumīgu komandu, kas parasti rada kļūdu “komanda nav atrasta”.

Apvalka komandu izejas apstrāde skriptā

Bash skriptos komandas izvadi var saglabāt mainīgajā turpmākai izmantošanai. To sauc arī par čaulas komandas aizstāšanu, un to var panākt šādos veidos.

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

Piemēram, komandu date varat saglabāt mainīgajā, kuru sauc šodien, un izsaukt čaulas skriptu, lai atklātu pašreizējo datumu.

#!/bin/bash

today=$(date)

echo “Today is $today”

Ņemsim vēl vienu piemēru. Pieņemsim, ka vēlaties atrast derīgus pieteikšanās lietotājus savā Linux sistēmā. Kā jūs to darītu? Pirmkārt, visu lietotāju (gan sistēmas, gan procesa, gan pieteikšanās lietotāju) saraksts tiek saglabāts failā/etc/passwd.

Lai skatītu failu, jums jāizmanto komanda grep, lai meklētu lietotājus ar/bin/bash atribūtu, un jāizmanto komanda cut -c 1-10, kā parādīts, lai parādītu vārdu pirmās 10 rakstzīmes.

Mēs esam saglabājuši kaķa komandu mainīgajam 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

Tādējādi mūsu apmācība par vienkāršu čaulas skriptu izveidi beidzas. Mēs ceram, ka jums tas likās vērtīgs.