Při psaní skriptů Bash budete často muset skript ukončit, když je splněna určitá podmínka, nebo provést akci na základě ukončovacího kódu příkazu.
V tomto článku se budeme zabývat exit
Bash vestavěný příkaz a stavy ukončení prováděných příkazů.
Stav ukončení #
Každý příkaz shellu vrátí kód ukončení, když je ukončen, ať už úspěšně nebo neúspěšně.
Podle konvence návratový kód nula znamená, že příkaz byl úspěšně dokončen, a nenulový znamená, že došlo k chybě.
Speciální proměnná $?
vrátí stav ukončení posledního provedeného příkazu:
date &> /dev/null
echo $?
date
příkaz byl úspěšně dokončen a kód ukončení je nula:
0
Pokud se pokusíte spustit ls
v neexistujícím adresáři bude výstupní kód nenulový:
ls /nonexisting_dir &> /dev/null
echo $?
2
Stavový kód lze použít ke zjištění, proč příkaz selhal. Manuálová stránka každého příkazu obsahuje informace o výstupních kódech.
Při provádění kanálu s více příkazy je výstupní stav kanálu stejný jako u posledního příkazu:
sudo tcpdump -n -l | tee file.out
echo $?
Ve výše uvedeném příkladu echo $?
vytiskne výstupní kód tee
příkaz.
Bash exit
příkaz #
exit
příkaz opustí shell se stavem N
. Má následující syntaxi:
exit N
Pokud N
není zadán, kód stavu ukončení odpovídá poslednímu provedenému příkazu.
Při použití ve skriptech shellu je hodnota zadaná jako argument pro exit
příkaz se vrátí do shellu jako výstupní kód.
Příklady #
Stav ukončení příkazů lze použít v podmíněných příkazech, jako je if
. V následujícím příkladu grep
ukončí se s nulou (což ve skriptování shellu znamená true), pokud je v filename
nalezen „vyhledávací řetězec“ :
if grep -q "search-string" filename then
echo "String found."
else
echo "String not found."
fi
Při spuštění seznamu příkazů oddělených &&
(AND) nebo ||
(NEBO), stav ukončení příkazu určuje, zda bude proveden další příkaz v seznamu. Zde je mkdir
příkaz bude proveden pouze v případě, že cd
vrátí nulu:
cd /opt/code && mkdir project
Pokud skript končí exit
bez zadání parametru je kód ukončení skriptu kódem posledního příkazu provedeného ve skriptu.
#!/bin/bash
echo "doing stuff..."
exit
Stačí použít exit
je stejný jako exit $?
nebo vynecháním exit
.
Zde je příklad ukazující, jak ukončit skript, pokud je vyvolán uživatelem bez oprávnění root:
#!/bin/bash
if [[ "$(whoami)" != root ]]; then
echo "Only user root can run this script."
exit 1
fi
echo "doing stuff..."
exit 0
Pokud skript spustíte jako uživatel root, bude výstupní kód nula. V opačném případě se skript ukončí se stavem 1
.
Závěr č.
Každý příkaz shellu po svém ukončení vrátí kód ukončení. exit
příkaz se používá k ukončení shellu s daným stavem.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.