Vyhledávání na webu

Jak vytvořit jednoduché skripty Shell v Linuxu


Vytváření shell skriptů je jednou z nejdůležitějších dovedností, které by uživatelé Linuxu měli mít na dosah ruky. Skripty shellu hrají obrovskou roli v automatizaci opakujících se úloh, které by jinak bylo únavné provádět řádek po řádku.

V tomto tutoriálu zdůrazňujeme některé základní operace skriptování shellu, které by měl mít každý uživatel Linuxu.

1. Vytvořte jednoduchý skript Shell

Shell skript je soubor, který obsahuje ASCII text. Začneme vytvořením jednoduchého shell skriptu ak tomu použijeme textový editor. Existuje celá řada textových editorů, a to jak s příkazovým řádkem, tak s GUI. Pro tento návod použijeme editor vim.

Začneme vytvořením jednoduchého skriptu, který po spuštění zobrazí „Ahoj světe“.

vim hello.sh

Vložte následující obsah do souboru a uložte.

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

Pojďme si projít skript shellu řádek po řádku.

  • První řádek – #!/bin/bash – je známý jako záhlaví shebang. Jedná se o speciální konstrukci, která udává, jaký program bude použit k interpretaci skriptu. V tomto případě to bude shell bash označený /bin/bash. Existují další skriptovací jazyky, jako je Python, který je označen #!/usr/bin/python3 a Perl, jehož hlavička shebang je označena #!/usr/bin/perl.
  • Druhý řádek je komentář. Komentář je příkaz, který popisuje, co skript shellu dělá a co se neprovádí, když je skript spuštěn. Komentářům vždy předchází znak hash #.
  • Poslední řádek je příkaz, který na terminál vytiskne zprávu „Hello World“.

Dalším krokem je učinit skript spustitelným přiřazením oprávnění ke spuštění pomocí příkazu chmod, jak je znázorněno.

chmod +x  hello.sh

Nakonec spusťte skript shellu pomocí některého z příkazů:

bash hello.sh
OR
./hello.sh

2. Použití podmíněných příkazů k provedení kódu

Stejně jako ostatní programovací jazyky se podmíněné příkazy používají ve skriptování bash k rozhodování, pouze s nepatrnými odchylkami v syntaxi. Budeme se zabývat podmíněnými příkazy if, if-else a elif.

Příklad pouze příkazu if

Příkaz if lze použít k testování jedné nebo více podmínek. Začneme základním použitím příkazu if k testování jedné podmínky. Příkaz if je definován bloky if ... fi.

if command
then
  statement
fi

Podívejme se na skript shellu níže.

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

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

Výše uvedený skript shellu vyzve uživatele, aby poskytl skóre, které se pak uloží do proměnné x. Pokud skóre odpovídá 70, skript vrátí výstup „Dobrá práce! “. Operátor porovnání == se používá k testování, zda zadané skóre, které je uloženo v proměnné x, odpovídá 100.

Mezi další srovnávací operátory, které můžete použít, patří:

  • -eq – Rovná se
  • -ne – Nerovná se
  • -lt – Méně než
  • -le – menší nebo rovno
  • -lt – Méně než
  • -ge – větší nebo rovno

Například níže uvedený blok if-statement vytiskne „Work Harder“, pokud je vstupní skóre jakékoli hodnoty nižší než 50.

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

Příklad příkazu if-else

V situacích, kdy máte 2 možné výsledky: – ať už to či ono – příkaz if-else se hodí.

if command
then
  statement1
else
  statement2
fi

Níže uvedený skript přečte vstupní skóre a zkontroluje, zda je větší nebo rovno 70.

Pokud je skóre vyšší nebo rovno 70, dostanete zprávu „Skvělá práce, prospěli jste!“. Pokud však skóre klesne pod 70, vytiskne se výstup „Neuspěli jste“.

#!/bin/bash

echo 'Enter the score'

read x

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

Příklad příkazu if-elif-else

Ve scénářích, kde existuje více podmínek a různé výsledky, se používá příkaz if-elif-else. Toto prohlášení má následující formát.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

Máme například skript pro loterii, který kontroluje, zda je zadané číslo buď 90, 60 nebo 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. Použití příkazu If s logikou AND

Příkaz if můžete použít vedle logického operátoru AND k provedení úlohy, pokud jsou splněny dvě podmínky. Operátor && se používá k označení logiky AND.

#!/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. Použití příkazu If s logikou OR

Při použití logiky OR, která je reprezentována symbolem ||, musí být ve skriptu splněna jedna z podmínek, aby se dosáhlo očekávaných výsledků.

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

Použijte cyklické konstrukce

Bash smyčky umožňují uživatelům provádět řadu úkolů, dokud není dosaženo určitého výsledku. To se hodí při provádění opakujících se úkolů. V této sekci se podíváme na některé smyčky, které byste také našli v jiných programovacích jazycích.

Zatímco smyčka

Jedná se o jednu z nejjednodušších smyček pro práci. Syntaxe je celkem jednoduchá:

while  <some test>
do
 commands
done

Smyčka while níže uvádí všechna čísla od 1 do 10 při spuštění.

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

Pojďme diskutovat o cyklu while:

Proměnná counter je inicializována na 1. A zatímco je proměnná menší nebo rovna 10, hodnota počítadla se bude zvyšovat, dokud nebude podmínka splněna. Řádek echo $counter vypíše všechna čísla od 1 do 10.

Pro smyčku

Podobně jako smyčka while, i smyčka for se používá k opakovanému provádění kódu. Tj. opakujte provádění kódu tolikrát, kolikrát je to možné, definované uživatelem.

Syntaxe je:

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

smyčka for níže prochází od 1 až po 10 a zpracovává jejich hodnoty na obrazovce.

Lepším způsobem, jak toho dosáhnout, je definovat rozsah pomocí dvojitých složených závorek { }, jak je znázorněno, místo psaní všech čísel.

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

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

Bash poziční parametry

Polohový parametr je speciální proměnná, na kterou se odkazuje ve skriptu, když jsou hodnoty předány do shellu, ale nelze je přiřadit. Poziční parametry se pohybují od $0 $1 $2 $3 …… do $9. Kromě hodnoty $9 musí být parametry uzavřeny do složených závorek, např. $ {10}, $ {11} … a tak dále.

Při provádění skriptu převezme první poziční parametr, kterým je $0, název skriptu shellu. Parametr $1 přebírá první proměnnou předávanou na terminálu, $2 přebírá druhou, $3 třetí a tak dále.

Vytvořme skript test.sh, jak je znázorněno.

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

Dále spusťte skript a zadejte první a druhé jméno jako argumenty:

bash test.sh James Kiarie

Z výstupu můžeme vidět, že první proměnná, která se vytiskne, je název skriptu shellu, v tomto případě test.sh. Poté se vytisknou názvy odpovídající pozičním parametrům definovaným ve skriptu shellu.

Poziční parametry jsou užitečné v tom, že vám pomohou přizpůsobit zadávaná data namísto explicitního přiřazení hodnoty proměnné.

Kódy ukončení příkazu Shell

Začněme odpovědí na jednoduchou otázku: Co je to výstupní kód?

Každý příkaz spuštěný v shellu uživatelem nebo skriptem shellu má stav ukončení. Výstupní stav je celé číslo.

Stav ukončení 0 znamená, že příkaz byl úspěšně proveden bez jakýchkoli chyb. Cokoli mezi 1 až 255 ukazuje, že příkaz selhal nebo nebyl úspěšně proveden.

Chcete-li zjistit stav ukončení příkazu, použijte proměnnou shellu $?.

Stav ukončení 1 ukazuje na obecnou chybu nebo jakékoli nepřípustné chyby, jako je úprava souborů bez oprávnění sudo.

Stav ukončení 2 ukazuje na nesprávné použití příkazu nebo vestavěné proměnné shellu.

Stav ukončení 127 ukazuje na neplatný příkaz, který obvykle vede k chybě „příkaz nenalezen“.

Zpracování výstupu příkazů Shell v rámci skriptu

Ve skriptování bash můžete uložit výstup příkazu do proměnné pro budoucí použití. To se také nazývá substituce příkazů shellu a lze toho dosáhnout následujícími způsoby.

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

Můžete například uložit příkaz date do proměnné s názvem dnes a zavolat skript shellu, aby odhalil aktuální datum.

#!/bin/bash

today=$(date)

echo “Today is $today”

Vezměme si další příklad. Předpokládejme, že chcete ve svém systému Linux najít platné přihlašovací uživatele. Jak byste na to šli? Nejprve je v souboru /etc/passwd uložen seznam všech uživatelů (systémových, procesních a přihlášených uživatelů).

Chcete-li soubor zobrazit, musíte použít příkaz cat. Chcete-li se však zúžit na přihlašované uživatele, použijte příkaz grep k vyhledání uživatelů s atributem /bin/bash a použijte příkaz cut -c 1-10 jako Zobrazí se prvních 10 znaků jmen.

příkaz cat jsme uložili do proměnné 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ím končí náš návod na vytváření jednoduchých shellových skriptů. Doufáme, že jste to našli cenné.