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.