Weboldal keresés

Egyszerű shell-szkriptek létrehozása Linuxban


A shell-szkriptek létrehozása az egyik legfontosabb készség, amellyel a Linux-felhasználóknak az ujjaik hegyén kell rendelkezniük. A shell-szkriptek óriási szerepet játszanak az ismétlődő feladatok automatizálásában, amelyek egyébként sorról sorra fárasztóak lennének.

Ebben az oktatóanyagban kiemelünk néhány alapvető shell szkriptelési műveletet, amelyekkel minden Linux-felhasználónak rendelkeznie kell.

1. Hozzon létre egy egyszerű shell-szkriptet

A shell script egy olyan fájl, amely ASCII szöveget tartalmaz. Kezdjük egy egyszerű shell script létrehozásával, ehhez egy szövegszerkesztőt fogunk használni. Elég sok szövegszerkesztő létezik, parancssori és grafikus felhasználói felület alapúak egyaránt. Ehhez az útmutatóhoz a vim szerkesztőt fogjuk használni.

Kezdjük azzal, hogy létrehozunk egy egyszerű szkriptet, amely végrehajtáskor a „Hello world” feliratot jeleníti meg.

vim hello.sh

Illessze be a következő tartalmat a fájlba, és mentse.

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

Soroljuk végig a shell scriptet soronként.

  • Az első sor – #!/bin/bash – shebang fejlécként ismert. Ez egy speciális konstrukció, amely jelzi, hogy milyen programot használunk a szkript értelmezésére. Ebben az esetben ez a /bin/bash által jelzett bash shell lesz. Vannak más szkriptnyelvek is, például a Python, amelyet a #!/usr/bin/python3 és a Perl, amelyek shebang fejlécet a következővel jelöli. #!/usr/bin/perl.
  • A második sor egy megjegyzés. A megjegyzés egy olyan utasítás, amely leírja, mit csinál egy shell-szkript, és mit nem hajtanak végre a parancsfájl futtatásakor. A megjegyzéseket mindig a # hash jel előzi meg.
  • Az utolsó sor az a parancs, amely a „Hello World” üzenetet nyomtatja ki a terminálon.

A következő lépés a szkript futtathatóvá tétele végrehajtási engedélyek hozzárendelésével a chmod paranccsal, az ábrán látható módon.

chmod +x  hello.sh

Végül futtassa a shell szkriptet a parancsok egyikével:

bash hello.sh
OR
./hello.sh

2. Feltételes utasítások használata a kód végrehajtásához

Más programozási nyelvekhez hasonlóan a feltételes utasításokat a bash szkriptekben is használják a döntések meghozatalára, a szintaxis csak kis eltérésekkel. Kitérünk az if, az if-else és az elif feltételes kijelentésekre.

Példa csak egy if-kimutatásra

Az if utasítás egyetlen vagy több feltétel tesztelésére is használható. Kezdjük az if utasítás alapvető használatával egyetlen feltétel tesztelésére. Az if utasítást az if ... fi blokkok határozzák meg.

if command
then
  statement
fi

Vessünk egy pillantást az alábbi shell-szkriptre.

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

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

A fenti shell-szkript arra kéri a felhasználót, hogy adjon meg egy pontszámot, amelyet a rendszer egy x változóban tárol. Ha a pontszám 70-nek felel meg, a szkript a „Jó munka!” kimenetet adja vissza. A == összehasonlító operátor annak tesztelésére szolgál, hogy az x változóban tárolt beírt pontszám egyenértékű-e a 100 értékkel.

További használható összehasonlító operátorok:

  • -eq – egyenlő
  • -ne – Nem egyenlő
  • -lt – Kevesebb, mint
  • -le – Kisebb vagy egyenlő
  • -lt – Kevesebb, mint
  • -ge – nagyobb vagy egyenlő, mint

Például az alábbi if-utasítás blokk a „Keményen dolgozzon” szöveget írja ki, ha a bemeneti pontszám 50-nél kisebb érték.

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

Példa egy if-else utasításra

Olyan helyzetekben, ahol 2 lehetséges kimenetel van: – akár ez, akár az – jól jön az if-else utasítás.

if command
then
  statement1
else
  statement2
fi

Az alábbi szkript beolvassa a bemeneti pontszámot, és ellenőrzi, hogy az nagyobb-e vagy egyenlő-e 70-el.

Ha a pontszám nagyobb vagy egyenlő, mint 70, akkor a „Remek munka, sikeres!” üzenetet kap. Ha azonban a pontszám 70 alá esik, a „Nem sikerült” kinyomtatásra kerül.

#!/bin/bash

echo 'Enter the score'

read x

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

Példa egy if-elif-else kijelentésre

Azokban a forgatókönyvekben, ahol több feltétel és eltérő kimenetel áll fenn, az if-elif-else utasítást használják. Ez a kijelentés a következő formátumot veszi fel.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Például van egy forgatókönyvünk egy lottóhoz, amely ellenőrzi, hogy a beírt szám 90, 60 vagy 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. Az If utasítás használata ÉS logikával

Használhatja az if utasítást az AND logikai operátor mellett egy feladat végrehajtásához, ha két feltétel teljesül. Az && operátor az ÉS logika jelölésére szolgál.

#!/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. Az If utasítás használata VAGY logikával

Ha a VAGY logikát használja, amelyet a || szimbólum jelöl, a várt eredmény eléréséhez bármelyik feltételnek teljesülnie kell a szkripttel.

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

Használjon hurkos konstrukciókat

A Bash hurkok segítségével a felhasználók egy sor feladatot hajthatnak végre, amíg el nem érnek egy bizonyos eredményt. Ez jól jön az ismétlődő feladatok elvégzésekor. Ebben a részben megtekintünk néhány olyan hurkot, amelyek más programozási nyelvekben is megtalálhatók.

Míg hurok

Ez az egyik legkönnyebben használható hurok. A szintaxis nagyon egyszerű:

while  <some test>
do
 commands
done

Az alábbi while ciklus az összes számot felsorolja 1-től 10-ig végrehajtáskor.

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

Beszéljük meg a while ciklust:

A counter változó inicializálása 1 értékre történik. És bár a változó kisebb vagy egyenlő, mint 10, a számláló értéke addig nő, amíg a feltétel teljesül. A echo $counter sor kiírja az összes számot 1-től 10-ig.

A hurokhoz

A while hurokhoz hasonlóan a for ciklus a kód iteratív végrehajtására szolgál. Azaz. ismételje meg a kódvégrehajtást a felhasználó által meghatározott számú alkalommal.

A szintaxis a következő:

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

Az alábbi for ciklus 1-től 10-ig iterál, és feldolgozza az értékeket a képernyőn.

Ennek jobb módja, ha az összes szám beírása helyett a dupla kapcsos kapcsos zárójelek ({ }) használatával határoz meg egy tartományt.

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

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

Bash pozícióparaméterek

A pozícióparaméter egy speciális változó, amelyre hivatkozik a szkript, amikor értékeket adnak át a héjon, de nem rendelhetők hozzá. A pozícióparaméterek $1 $2 $3 ……-tól $9ig terjednek. A $9 értéken túl a paramétereket zárójelek közé kell tenni, pl. $ {10}, $ {11} … és így tovább.

A parancsfájl végrehajtásakor az első pozícióparaméter, amely $0, a shell szkript nevét veszi fel. A $1 paraméter veszi az első változót, amelyet a terminál továbbít, a $2 a másodikat, a $3 a harmadikat és így tovább.

Hozzuk létre a test.sh szkriptet az ábra szerint.

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

Ezután futtassa a szkriptet, és adja meg az első és a második nevet argumentumként:

bash test.sh James Kiarie

A kimenetből láthatjuk, hogy az első kinyomtatott változó a shell szkript neve, ebben az esetben a test.sh. Ezt követően a rendszer kinyomtatja a neveket a shell scriptben meghatározott pozícióparamétereknek megfelelően.

A pozícióparaméterek hasznosak, mivel segítik a beírt adatok testreszabását, ahelyett, hogy egy változóhoz explicit értéket rendelnének.

Shell parancs kilépési kódjai

Kezdjük egy egyszerű kérdés megválaszolásával: Mi az a kilépési kód?

Minden parancs, amelyet egy felhasználó vagy shell-szkript hajt végre a parancsértelmezőn, kilépési állapottal rendelkezik. A kilépési állapot egész szám.

A 0 kilépési állapot azt jelenti, hogy a parancs sikeresen, hiba nélkül futott. Bármi, ami 1 és 255 között van, azt jelzi, hogy a parancs sikertelen vagy sikertelen volt.

Egy parancs kilépési állapotának megállapításához használja a $? Shell változót.

Az 1-es kilépési állapot általános hibára vagy bármilyen meg nem engedett hibára utal, például fájlok szerkesztésére sudo engedélyek nélkül.

2 pont kilépési állapot a parancs vagy a beépített shell-változó helytelen használatáért.

A 127-es kilépési állapot illegális parancsra mutat, amely általában a „parancs nem található” hibát eredményezi.

Shell-parancsok kimenetének feldolgozása egy szkripten belül

A bash szkripteknél a parancs kimenetét egy változóban tárolhatja későbbi felhasználás céljából. Ezt shell parancshelyettesítésnek is nevezik, és a következő módokon érhető el.

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

Például tárolhatja a date parancsot egy today nevű változóban, és meghívhatja a shell szkriptet az aktuális dátum megjelenítéséhez.

#!/bin/bash

today=$(date)

echo “Today is $today”

Vegyünk egy másik példát. Tegyük fel, hogy meg szeretné találni az érvényes bejelentkező felhasználókat a Linux rendszeren. Ti hogy mennétek hozzá? Először is, az összes felhasználó listája (mind a rendszer-, mind a folyamat-, mind a bejelentkező felhasználók) az /etc/passwd fájlban kerül tárolásra.

A fájl megtekintéséhez a cat parancsot kell használnia. A felhasználók bejelentkezésének szűkítéséhez használja a grep paranccsal a /bin/bash attribútummal rendelkező felhasználókat, és használja a cut -c 1-10 parancsot látható a nevek első 10 karakterének megjelenítéséhez.

A cat parancsot a login_users változóban tároltuk.

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

Ezzel az egyszerű shell-szkriptek létrehozásáról szóló oktatóanyagunk véget ért. Reméljük értékesnek találta ezt.