Spousta programů vrací nějakou hodnotu, která závisí na tom, jak program skončí. Například podíváte-li se na manuálovou stránku příkazu grep
, zjistíte, že příkaz vrátí 0 jestliže hledané nalezl a 1 jestli nenašel nic. Proč by jsme měli zjišťovat návratovou hodnotu programu? Pro různé důvody. Toto uvážení nechme na každém uživateli. Jedna z možností je například, chceme-li pomocí skriptu zjistit, zda-li je v systému uživatel "karel". Nahlédneme do souboru /etc/passwd a budeme pátrat po slovu karel. Příklad skriptu je zde:
#!/bin/bash
if grep "karel" /etc/passwd > /dev/null
then
echo "Uživatel karel v systému existuje"
else
echo "Uživatel karel v systému neexistuje"
fi
Nyní když spustíme skript, bude program grep vyhledávat v souboru /etc/passwd slovo karel. Nalezne-li, vrátí true a funkce if tedy vykoná výpis, že uživatel existuje. Další možnost skriptu, který bude vykonávat totéž si ukážeme nyní. Budeme však používat návrtovou hodnotu trochu jinak. Návratová hodnota se totiž uloží do speciální proměnné, která se jmenuje $?
.
#!/bin/bash
# hledání karla a veškerý výstup je přesměrován do /dev/null:
grep "karel" > /dev/null 2>&1
# uloží návratovou hodnotu a podle ní vykoná:
if [ "$?" -eq 0 ]; then
echo "Nenalezen."
exit
else
echo "Nalezen."
fi
Návratovou hodnotu může mít také funkce ve vašem skriptu. Toho se docílí přidáním řádku return
a příslušné hodnoty. Když shell dorazí na tento řádek při vykonávání funkce, je funkce ukončena s návratovou hodnotu, která je stanovena jako parametr za slovem return. Malý příklad:
detekce_souboru()
{
# testuje, jestli soubor existuje:
if [ -f /etc/passwd ]; then
echo "Soubor hesel existuje"
return 0
else
echo "Soubor hesel nenalezen."
return 1
}
# načte hodnotu z funkce detekce_souboru:
foo=detekce_souboru
# zjištění hodnoty:
if [ "$foo" -eq 0 ]; then
echo "Soubor existuje"
exit 0
else
echo "Soubor neexistuje"
exit 1
fi
Věřím, že kódu není až zas tak těžké porozumět. Nakonec je důležité si uvědomit, že hodnota true
představuje číslo 0 a hodnota false
představuje číslo 1.