existuje.sh
)ucet.sh
cislo.sh
)exit
cislo2.sh
($?
)existuje.sh
) Vytvořte cvičný soubor ~/existuje.sh
s následujícím skriptem:
#!/bin/bash
echo "Zapiš název souboru:"
read nazev
if test -f $nazev
then
echo "Soubor existuje."
else
echo "Soubor neexistuje!"
fi
Podmínka test -f
vrací 1
(TRUE), je-li $nazev
soubor.
Častěji se příkaz test nahrazuje hranatými závorkami. Ty musí být z obou stran odsazené mezerou (je to příkaz):
if [ -f $nazev ]
Opravte v předchozím skriptu a vyzkoušejte.
Parametry příkazu test nebo „závorkové“ konstrukce [ -f $nazev ]
:
[ -e soubor ] soubor existuje
[ -f soubor ] je to soubor
[ -d soubor ] je to adresář
[ -s soubor ] velikost souboru není 0
[ -r soubor ] soubor jde číst
[ -w soubor ] do souboru jde zapisovat
[ -x soubor ] soubor je spustitelný
[ souborA -nt souborB ] první soubor je novější
[ souborA -no souborB ] první soubor je starší
Nejsou to všechny parametry. Další „tradičně“ na man test
.
ucet.sh
Napište skript ~/ucet.sh
, který ze vstupu načte zadané uživatelské jméno. Následně jej porovná s názvem vašeho uživatelského jména a vypíše zprávu, zda je nebo není shodné.
Jméno přihlášeného uživatele vypíše příkaz whoami
:
$ whoami
karel
Všechny proměnné v shellu jsou jednoho datového typu. Nemá ani typovou konverzi. To vysvětluje, proč se řetězce a čísla porovnávají níže popsaným způsobem. výraz
, výraz1
i výraz2
vrací řetězec. Teprve když ho chceme porovnávat jako číslo, tak ho shell bere jako číslo.
Pokud je výraz TRUE vrací 1
, jinak vrací 0
(FALSE).
[ výraz ] délka řetězce je nenulová
[ -z výraz ] délka řetězce je nulová
[ výraz1 == výraz2 ] řetězce jsou shodné
[ výraz1 != výraz2 ] řetězce jsou různé
[ výraz1 -eq výraz2 ] čísla jsou shodná (equals)
[ výraz1 -ne výraz2 ] čísla jsou různá (not equal)
[ výraz1 -le výraz2 ] výraz1 <= výraz2 (lees or equal)
[ výraz1 -lt výraz2 ] výraz1 < výraz2 (less than)
[ výraz1 -ge výraz2 ] výraz1 >= výraz2 (greater or equal)
[ výraz1 -gt výraz2 ] výraz1 > výraz2 (greater than)
cislo.sh
) #!/bin/bash
echo -n "Zadej celé číslo: "
read a
if [ $a -gt 100 ]
then
echo "$a je větší než 100"
elif [ $a -lt 100 ]
then
echo "$a je menší než 100"
else
echo "$a je rovno 100"
fi
exit
exit n
Příkaz okamžité ukončí skript s daným návratovým kódem:
exit 0
... úspěšné ukončeníexit n
... ukončení s chybou (n
je 1 – 125, nejčastěji 1)Ostatní n
jsou rezervovány.
cislo2.sh
($?
) Vytvořte kopii skriptu cislo.sh
s názvem cislo2.sh
: Doplňte do něj návratové kódy takto:
0
... pokud je číslo 1001
... pokud je menší než 1002
... pokud je větší než 1003
... pokud je zápornéNávratové kódy ověřte v terminálu příkazem:
$ echo $?
Proměnná $?
obsahuje návratový status (kód) vykonaného programu. Návratové kódy neslouží ani tak uživateli, ale především systému nebo jinému skriptu.
Více podmínek se spojuje operátory &&
(AND) nebo ||
(OR).
Bash má odlišnou syntaxi:
if [ -r $nazev ] && [ -w $nazev ]
if [[ (podm_1 && podm_2) || (podm_3 && podm_4) ]]