PředchozíNahoruDalšíObsah

14. Návratové hodnoty

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.

PředchozíNahoruDalšíObsah

20. května 2000 19:37