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.