V našem úvodním článku bash jsme se dozvěděli, že soubor skriptu shellu obsahuje seznam příkazů, které má provést interpret shellu. V tomto článku se podíváme na příkazy shellu a jejich vnitřnosti.
Příkaz je posloupnost slov. První slovo označuje příkaz, který se má provést, a zbývající slova jsou předána jako argumenty, kde argumenty mohou být možnosti nebo parametry příkazu.
Některé běžné unixové příkazy, které spouštíte na příkazovém řádku jsou příkazy shellu. Například příkazy ls, lpr a grep.
$ ls -alF $ lpr filename $ grep "string" filename
Stav ukončení příkazu Shell
Návratovou hodnotou příkazu je jeho výstupní stav, nebo 128 + N, pokud je příkaz ukončen signálem N. Výstupní stav slouží ke kontrole výsledku (úspěch/neúspěch) provedení příkazu. Pokud je stav ukončení nula, je příkaz úspěšný. Pokud příkaz selže, stav ukončení bude nenulový.
Výstupní hodnota | Stav ukončení |
---|---|
0 (nula) | Úspěch |
Nenulová | Selhání |
2 | Nesprávné použití |
127 | Příkaz nenalezen |
126 | Není spustitelný soubor |
$? Shell Variable
Název proměnné shellu $? je speciální vestavěná proměnná, která má výstupní stav posledního provedeného příkazu.
- Po provedení funkce shellu $? vrátí stav ukončení posledního příkazu provedeného ve funkci.
- Po spuštění skriptu shell $? vrátí stav ukončení posledního příkazu provedeného ve skriptu.
Ukázkový skript Shell, který vysvětluje stav ukončení příkazu Shell
Následující skript shell-exitstatus.sh ukazuje příklady různých stavů ukončení příkazů shellu.
$ cat exitstatus.sh #! /bin/bash echo -e "Successful execution" echo -e "=====================" echo "hello world" # Exit status returns 0, because the above command is a success. echo "Exit status" $? echo -e "Incorrect usage" echo -e "=====================" ls --option # Incorrect usage, so exit status will be 2. echo "Exit status" $? echo -e "Command Not found" echo -e "=====================" bashscript # Exit status returns 127, because bashscript command not found echo "Exit status" $? echo -e "Command is not an executable" echo -e "=============================" ls -l execution.sh ./execution.sh # Exit status returns 126, because its not an executable. echo "Exit status" $?
Nyní spusťte výše uvedený exitstatus.sh, abyste viděli různé podoby výstupu dané ukázkovým skriptem shellu.
$ bash exitstatus.sh Successful execution ===================== hello world Exit status 0 Incorrect usage ===================== ls: unrecognized option `--option' Try `ls --help' for more information. Exit status 2 Command Not found ===================== exitstaus.sh: line 15: bashscript: command not found Exit status 127 Command is not an executable ============================= -rw-r--r-- 1 root root 659 Mar 9 13:36 execution.sh exitstatus.sh: line 21: ./execution.sh: Permission denied Exit status 126
Poznámka:Kontrola návratové hodnoty funkce nebo příkazu je jednou z hlavních povinností programátora. To by se mělo stát vaší druhou přirozeností při psaní jakéhokoli kódu.