Kuinka luoda yksinkertaisia Shell-komentosarjoja Linuxissa


Shell-komentosarjojen luominen on yksi tärkeimmistä taidoista, jotka Linux-käyttäjillä pitäisi olla sormenpäässä. Shell-skripteillä on valtava rooli toistuvien tehtävien automatisoinnissa, jotka muuten olisivat tylsiä suorittamaan rivi riviltä.

Tässä opetusohjelmassa korostamme joitain komentosarjan komentosarjojen perustoimintoja, jotka jokaisella Linux-käyttäjällä pitäisi olla.

1. Luo yksinkertainen Shell-komentosarja

Shell-komentosarja on tiedosto, joka sisältää ASCII-tekstin. Aloitamme luomalla yksinkertaisen shell-komentosarjan ja tekemään tämän varten tekstieditorin. Vim-editoria on melko paljon.

Aloitamme luomalla yksinkertaisen komentosarjan, 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!"

Mennään komentosarjan komentoriviltä rivikohtaisesti.

  • Ensimmäinen rivi - #!/bin/bash - tunnetaan nimellä shebang-otsikko. Tämä on erityinen rakenne, joka osoittaa, mitä ohjelmaa käytetään komentosarjan tulkintaan. Tässä tapauksessa tämä on bash-kuori, jonka osoittaa/bin/bash. On olemassa muita komentosarjakieliä, kuten Python, jota merkitään #!/Usr/bin/python3 ja Perl, jonka shebang-otsikko on, on merkitty #!/Usr/bin/perl .
  • Toinen rivi on kommentti. Kommentti on lause, joka kuvaa mitä komentosarjakomentosarja tekee ja jota ei suoriteta, kun komentosarja suoritetaan. Kommentteja edeltää aina hash-merkki # .
  • Viimeinen rivi on komento, joka tulostaa "Hello World" -sanoman päätelaitteeseen.

Seuraava vaihe on tehdä komentosarja suoritettavaksi määrittämällä suorituslupa käyttämällä chmod-komentoa kuvan mukaisesti.

$ chmod +x  hello.sh

Suorita lopuksi shell-komentosarja käyttämällä kumpaakin komentoa:

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

2. Ehdollisten lauseiden käyttäminen koodin suorittamiseen

Muiden ohjelmointikielien tapaan ehdollisia lauseita käytetään bash-komentosarjassa päätöksenteossa, syntaksissa on vain pieni vaihtelu. Aiomme käsitellä if, if-else ja elif ehdollisia lausuntoja.

If-käskyä voidaan käyttää yhden tai useamman ehdon testaamiseen. Aloitamme if-lauseen perustavanlaatuisesta käytöstä yhden ehdon testaamiseksi. If-käskyn määrittävät if ... fi -lohkot.

if command
then
  statement
fi

Katsotaanpa alla olevaa komentotulkkikomentoa.

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

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

Yllä oleva komentotiedosto kehottaa käyttäjää antamaan pisteet, jotka sitten tallennetaan muuttujaan x. Jos pisteet vastaavat 70, komentosarja palauttaa tuloksen ”Hyvä työ!”. Vertailuoperaattoria == käytetään testaamaan, vastaako syötetty piste, joka on tallennettu muuttujaan x, 100.

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

  • -eq - yhtä suuri kuin
  • -ne - Ei ole yhtä suuri kuin
  • -lt - alle
  • -le - pienempi tai yhtä suuri kuin
  • -lt - alle
  • -ge - suurempi tai yhtä suuri kuin

Esimerkiksi alla oleva if-lauseen lohko tulostaa ”Työskentele kovemmin”, jos tulopisteen arvo on alle 50.

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

Tilanteissa, joissa sinulla on 2 mahdollista tulosta: - onko tämä vai toinen - if-else-lause on kätevä.

if command
then
  statement1
else
  statement2
fi

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

Jos pistemäärä on suurempi tai yhtä suuri kuin 70, saat viestin ”Hyvä työ, läpäisit!”. Jos pisteet kuitenkin laskevat alle 70, tulos ”Epäonnistut” tulostetaan.

#!/bin/bash

echo 'Enter the score'

read x

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

Skenaarioissa, joissa on useita ehtoja ja erilaiset tulokset, käytetään if-elif-else-käskyä. Tämä lausunto on seuraavassa muodossa.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Meillä on esimerkiksi skripti arpajaisia varten, joka tarkistaa, onko syötetty numero 90, 60 tai 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ä AND-logiikkaoperaattorin vieressä tehtävän suorittamiseen, jos kaksi ehtoa täyttyy. Operaattoria && käytetään AND-logiikan merkitsemiseen.

#!/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ö OR-logiikan kanssa

Kun käytetään OR-logiikkaa, jota edustaa symboli || , jommankumman ehdoista on täytettävä komentosarjalla odotettujen tulosten aikaansaamiseksi.

#!/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 useita tehtäviä, kunnes saavutetaan tietty tulos. Tämä on kätevää toistuvien tehtävien suorittamisessa. Tässä osiossa käymme läpi joitain silmukoita, jotka löydät myös muilta ohjelmointikieliltä.

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

while  <some test>
do
 commands
done

Alla oleva while-silmukka listaa kaikki numerot 1-10 suoritettaessa.

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

Selvitetään while-silmukka:

Muuttujan laskuri alustetaan arvoon 1. Ja vaikka muuttuja on pienempi tai yhtä suuri kuin 10, laskurin arvoa lisätään, kunnes ehto täyttyy. Linja echo $laskuri tulostaa kaikki numerot 1-10.

Kuten while-silmukan tapaan, for for -silmukkaa käytetään koodin suorittamiseen iteratiivisesti. Eli. toista koodin suoritus niin monta kertaa kuin käyttäjä on määrittänyt.

Syntaksi on:

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

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

Parempi tapa saavuttaa tämä on määritellä alue käyttämällä kaksinkertaisia kiharoita aaltosulkeita {} kuvan mukaisesti kaikkien numeroiden kirjoittamisen sijaan.

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

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

Bash-sijaintiparametrit

Sijaintiparametri on erityinen muuttuja, johon viitataan komentosarjassa, kun arvot välitetään kuorelle, mutta sitä ei voida määrittää. Paikallisparametrit vaihtelevat välillä $0 $1 $2 $3 …… - $9. 9 dollarin arvon ylittävän parametrin on oltava suljettuina sulkeissa, esim. & # 36 {10}, & # 36 {11} ... ja niin edelleen.

Komentosarjaa suoritettaessa ensimmäinen sijaintiparametri, joka on $0, ottaa komentosarjan nimen. Parametri $1 vie ensimmäisen muuttujan, joka välitetään päätelaitteelle, $2 ottaa toisen, $3 kolmannen ja niin edelleen.

Luodaan komentosarja 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 argumentiksi etu- ja toinen nimi:

# bash test.sh James Kiarie

Tuloksesta voimme nähdä, että ensimmäinen tulostettu muuttuja on shell-komentosarjan nimi, tässä tapauksessa test.sh. Sen jälkeen nimet tulostetaan kuoriskriptissä määriteltyjen sijaintiparametrien mukaisesti.

Paikkaparametrit ovat hyödyllisiä siinä mielessä, että ne auttavat sinua mukauttamaan syötettäviä tietoja sen sijaan, että määritettäisiin nimenomaisesti muuttujalle arvo.

Shell-komentojen poistumiskoodit

Aloitetaan vastaamalla yksinkertaiseen kysymykseen, mikä on poistumiskoodi?

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

Poistumistila 0 tarkoittaa, että komento suoritetaan onnistuneesti ilman virheitä. Kaikki väliltä 1–255 osoittaa, että komento epäonnistui tai ei onnistunut.

Voit löytää komennon poistumistilan käyttämällä $? Shell-muuttujaa.

1-poistumistila osoittaa yleisen virheen tai mahdolliset virheet, kuten tiedostojen muokkaamisen ilman sudo-oikeuksia.

2-poistumistila osoittaa komennon tai sisäänrakennetun kuorimuuttujan väärän käytön.

127 poistumistila osoittaa laitonta komentoa, joka yleensä aiheuttaa 'komentoa ei löydy' -virheen.

Shell-komentojen tulostuksen käsitteleminen komentosarjassa

Bash-komentosarjoissa voit tallentaa komennon lähdön muuttujaan tulevaa käyttöä varten. Tätä kutsutaan myös komentotulkkikomennoksi ja se voidaan saavuttaa seuraavilla tavoilla.

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

Voit esimerkiksi tallentaa päivämääräkomennon muuttujaan, jota kutsutaan tänään, ja kutsua shell-komentosarjaa paljastamaan nykyinen päivämäärä.

#!/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. Kuinka tekisit sen? Ensinnäkin luettelo kaikista käyttäjistä (sekä järjestelmä-, prosessi- että kirjautumiskäyttäjistä) tallennetaan tiedostoon/etc/passwd.

Jos haluat tarkastella tiedostoa, sinun on käytettävä grep-komentoa etsimällä käyttäjiä/bin/bash-määritteellä ja käyttämällä cut -c 1-10 -komentoa kuvan osoittamalla tavalla, jotta saat näkyviin nimien 10 ensimmäistä merkkiä.

Olemme tallentaneet kissakomennon 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ä tuo opastuksemme yksinkertaisten komentosarjojen luomisesta loppuun. Toivomme, että pidit tämän arvokkaana.