Kuinka luoda yksinkertaisia Shell-skriptejä Linuxissa


Shell-skriptien luominen on yksi tärkeimmistä taidoista, jotka Linux-käyttäjillä pitäisi olla sormiensa päässä. Shell-skripteillä on valtava rooli automatisoitaessa toistuvia tehtäviä, jotka muuten olisivat tylsiä suorittaa rivi riviltä.

Tässä opetusohjelmassa korostamme joitain peruskomentosarjatoimintoja, jotka jokaisella Linux-käyttäjällä tulisi olla.

1. Luo yksinkertainen komentosarja

Shell-skripti on tiedosto, joka sisältää ASCII-tekstiä. Aloitamme luomalla yksinkertaisen shell-skriptin, ja käytämme tähän tekstieditoria. Tekstieditoreja on melko paljon, sekä komentorivi- että GUI-pohjaisia. Tässä oppaassa käytämme vim-editoria.

Aloitamme luomalla yksinkertaisen skriptin, joka näyttää "Hello world", kun se suoritetaan.

vim hello.sh

Liitä seuraava sisältö tiedostoon ja tallenna.

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

Käydään läpi shell-skripti rivi riviltä.

  • Ensimmäinen rivi – #!/bin/bash – tunnetaan shebang-otsikona. Tämä on erityinen rakenne, joka osoittaa, mitä ohjelmaa käytetään komentosarjan tulkitsemiseen. Tässä tapauksessa tämä on bash-kuori, jota ilmaisee /bin/bash. On muitakin komentosarjakieliä, kuten Python, joka on merkitty #!/usr/bin/python3 ja Perl, jonka shebang-otsikko on merkitty #!/usr/bin/perl.
  • Toinen rivi on kommentti. Kommentti on lause, joka kuvaa mitä komentosarja tekee ja jota ei suoriteta, kun komentosarjaa ajetaan. Kommentteja edeltää aina hash-merkki #.
  • Viimeinen rivi on komento, joka tulostaa "Hello World" -viestin terminaaliin.

Seuraava vaihe on tehdä komentosarjasta suoritettava antamalla suoritusoikeus chmod-komennolla kuvan mukaisesti.

chmod +x  hello.sh

Suorita lopuksi shell-skripti jommallakummalla komennolla:

bash hello.sh
OR
./hello.sh

2. Ehdollisten lausekkeiden käyttö koodin suorittamiseen

Kuten muutkin ohjelmointikielet, ehdollisia lauseita käytetään bash-komentosarjassa päätösten tekemiseen, mutta syntaksissa on vain pieni vaihtelu. Käsittelemme ehdollisia lausekkeita if, if-else ja elif.

Esimerkki vain if-lausekkeesta

if-lausetta voidaan käyttää yksittäisten tai useiden ehtojen testaamiseen. Aloitamme if-lausekkeen peruskäytöstä yksittäisen ehdon testaamiseen. if-käsky määritellään if ... fi-lohkoilla.

if command
then
  statement
fi

Katsotaanpa alla olevaa shell-skriptiä.

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

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

Yllä oleva komentosarja kehottaa käyttäjää antamaan pistemäärän, joka sitten tallennetaan muuttujaan x. Jos pistemäärä vastaa 70, komentosarja palauttaa tuloksen "Hyvää työtä!". Vertailuoperaattorilla == testataan, vastaako annettu pistemäärä, joka on tallennettu muuttujaan x, 100.

Muita vertailuoperaattoreita, joita voit käyttää, ovat:

  • -eq – yhtä suuri kuin
  • -ne – Ei yhtä suuri kuin
  • -lt – Vähemmän kuin
  • -le – pienempi tai yhtä suuri kuin
  • -lt – Vähemmän kuin
  • -ge – suurempi tai yhtä suuri kuin

Esimerkiksi alla oleva if-lause -lohko tulostaa tekstin Work Harder, jos syöttöpistemäärä on mikä tahansa alle 50.

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

Esimerkki if-else-lausekkeesta

Tilanteissa, joissa sinulla on kaksi mahdollista lopputulosta: – joko tämä tai tuo – jos-else-lauseke on hyödyllinen.

if command
then
  statement1
else
  statement2
fi

Alla oleva skripti lukee syötepisteet ja tarkistaa, onko se suurempi tai yhtä suuri kuin 70.

Jos pistemäärä on suurempi tai yhtä suuri kuin 70, saat Hienoa työtä, läpäisit! -viestin. Jos tulos kuitenkin laskee alle 70, tuloste "Epäonnisit" tulostetaan.

#!/bin/bash

echo 'Enter the score'

read x

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

Esimerkki if-elif-else -lausekkeesta

Skenaarioissa, joissa on useita ehtoja ja erilaisia tuloksia, käytetään if-elif-else-lausetta. Tämä lausunto on seuraavassa muodossa.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Meillä on esimerkiksi skripti lottoa varten, joka tarkistaa, onko syötetty numero 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. If-lauseen käyttäminen AND-logiikan kanssa

Voit käyttää if-käskyä logiikkaoperaattorin AND rinnalla suorittaaksesi tehtävän, jos kaksi ehtoa täyttyy. Operaattoria && käytetään ilmaisemaan AND-logiikka.

#!/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-lauseen käyttäminen OR-logiikan kanssa

Kun käytetään OR-logiikkaa, jota edustaa ||-symboli, jommankumman ehdon on täytettävä komentosarja, jotta odotetut tulokset saadaan.

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

Käytä silmukkarakenteita

Bash silmukoiden avulla käyttäjät voivat suorittaa sarjan tehtäviä, kunnes tietty tulos on saavutettu. Tämä on hyödyllistä suoritettaessa toistuvia tehtäviä. Tässä osiossa kurkistamme joitain silmukoista, jotka löydät myös muilta ohjelmointikieliltä.

Vaikka silmukka

Tämä on yksi helpoimmista silmukoista. Syntaksi on melko yksinkertainen:

while  <some test>
do
 commands
done

Alla oleva while-silmukka luettelee kaikki numerot 1-10 suoritettuna.

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

Puhutaanpa while-silmukasta:

Muuttuja laskuri alustetaan arvoon 1. Ja vaikka muuttuja on pienempi tai yhtä suuri kuin 10, laskurin arvoa kasvatetaan, kunnes ehto täyttyy. Rivi echo $counter tulostaa kaikki numerot 1:stä 10:een.

Silmukalle

Kuten while silmukka, for-silmukkaa käytetään koodin suorittamiseen iteratiivisesti. Eli toista koodin suoritus niin monta kertaa kuin mahdollista käyttäjän määrittelemä.

Syntaksi on:

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

Alla oleva for-silmukka toistuu 1:stä 10:een ja käsittelee niiden arvot näytöllä.

Parempi tapa saavuttaa tämä on määrittää alue käyttämällä kaksoishakasulkeita { } kuvan mukaisesti sen sijaan, että kirjoittaisit kaikki numerot.

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

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

Bash-sijaintiparametrit

Paikkaparametri on erityinen muuttuja, johon viitataan komentosarjassa, kun arvot välitetään kuoressa, mutta niitä ei voida määrittää. Paikkaparametrit ovat $0 $1 $2 $3 …… - $9. Arvon $9 ylittävät parametrit on suljettava hakasulkeissa, esim. $ {10}, $ {11} … ja niin edelleen.

Kun komentosarjaa suoritetaan, ensimmäinen sijaintiparametri, joka on $0, ottaa komentotulkkikomentosarjan nimen. Parametri $1 ottaa ensimmäisen terminaalissa välitetyn muuttujan, $2 toisen, $3 kolmannen ja niin edelleen.

Luodaan script test.sh kuvan mukaisesti.

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

Suorita seuraavaksi komentosarja ja anna ensimmäinen ja toinen nimi argumentteina:

bash test.sh James Kiarie

Tulosteesta voimme nähdä, että ensimmäinen tulostettava muuttuja on komentotulkkikomentosarjan nimi, tässä tapauksessa test.sh. Tämän jälkeen nimet tulostetaan komentosarjassa määritettyjen sijaintiparametrien mukaisesti.

Paikkaparametrit ovat hyödyllisiä, koska ne auttavat sinua mukauttamaan syötettäviä tietoja sen sijaan, että määrittäisivät nimenomaisesti arvon muuttujalle.

Shell-komentojen poistumiskoodit

Aloitetaan vastaamalla yksinkertaiseen kysymykseen: Mikä on poistumiskoodi?

Jokaisella käyttäjän tai komentosarjan komentotulkissa suorittamalla komennolla on poistumistila. Poistumistila on kokonaisluku.

Poistumistila 0 tarkoittaa, että komento suoritettiin onnistuneesti ilman virheitä. Mikä tahansa väliltä 1–255 osoittaa, että komento epäonnistui tai sitä ei suoritettu onnistuneesti.

Voit selvittää komennon poistumistilan käyttämällä $? Shell-muuttujaa.

Poistumistila 1 viittaa yleiseen virheeseen tai kaikkiin kiellettyihin virheisiin, kuten tiedostojen muokkaamiseen ilman sudo-oikeuksia.

2 pisteen poistumistila komennon tai sisäänrakennetun komentotulkkimuuttujan virheellisestä käytöstä.

Poistumistila 127 osoittaa laittomaan komentoon, joka yleensä antaa komentoa ei löydy -virheen.

Shell-komentojen tulosteen käsittely komentosarjan sisällä

Bash-komentosarjassa voit tallentaa komennon tulosteen muuttujaan tulevaa käyttöä varten. Tätä kutsutaan myös komentotulkkikomentojen korvaamiseksi, ja se voidaan saavuttaa seuraavilla tavoilla.

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

Voit esimerkiksi tallentaa date-komennon muuttujaan nimeltä today ja kutsua komentotulkkikomentoa näyttääksesi nykyisen päivämäärän.

#!/bin/bash

today=$(date)

echo “Today is $today”

Otetaan toinen esimerkki. Oletetaan, että haluat löytää kelvolliset kirjautumiskäyttäjät Linux-järjestelmästäsi. Miten toimisit? Ensinnäkin kaikkien käyttäjien luettelo (sekä järjestelmä-, prosessi- että kirjautumiskäyttäjät) tallennetaan /etc/passwd-tiedostoon.

Jos haluat tarkastella tiedostoa, sinun on käytettävä cat-komentoa. Jos haluat kuitenkin rajata käyttäjien kirjautumisen, käytä grep-komentoa etsimään käyttäjiä /bin/bash-attribuutilla ja käytä komentoa cut -c 1-10 näyttää nimien 10 ensimmäistä merkkiä.

Olemme tallentaneet cat-komennon login_users-muuttujaan.

#!/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ämä lopettaa opetusohjelmamme yksinkertaisten komentotulkkikomentosarjojen luomisesta. Toivomme, että pidit tämän arvokkaana.