Crmgo Blog

if...then...else... syntaxe

if...then...else... syntaxe

? if [ podmínka ] then pokud je podmínka splněna, proveďte všechny příkazy až do else nebo do fi else pokud podmínka není splněna, proveďte všechny příkazy až do fi fi Velmi důležité je zapamatovat si, že vaše konstrukce musí vždy končit slovem fi! Výrazy…

if...then...else... syntaxe


if [ условие ]
then
 если условие справедливо
 выполнить все команды до else или
 до fi
else
 если условие не справедливо
 выполнить все команды до fi
fi

Je velmi důležité si zapamatovat, že váš blok musí vždy končit slovem fi!

Výrazy používané s if

V tabulce níže jsou uvedeny operátory, které vykonávají příkaz test nebo sadu příkazů. Tyto operátory jsou uzavřeny ve čtvercových závorkách [] pro ověření splnění podmínky.

[ -a FILE ] Правда елси FILE существует.
[ -b FILE ] Правда елси FILE существует и это специальный блоковый файл.
[ -c FILE ] Правда елси FILE существует и это специальный знаковый файл.
[ -d FILE ] Правда елси FILE существует и это директория.
[ -e FILE ] Правда елси FILE существует.
[ -f FILE ] Правда елси FILE существует и это регулярный файл.
[ -g FILE ] Правда елси FILE существует и установлен SGID бит.
[ -h FILE ] Правда елси FILE существует и это символический ссылка.
[ -k FILE ] Правда елси FILE существует и второй промежуточный бит округления установлен.
[ -p FILE ] Правда елси FILE существует и это named pipe (FIFO).
[ -r FILE ] Правда елси FILE существует и он доступен на чтение.
[ -s FILE ] Правда елси FILE существует и больше нуля.
[ -u FILE ] Правда елси FILE существует и SUID (set user ID) бит установлен.
[ -w FILE ] Правда елси FILE существует и он доступен на запись.
[ -x FILE ] Правда елси FILE существует и он доступен на исполнение.
[ -O FILE ] Правда елси FILE существует принадлежит существующему пользователю
[ -G FILE ] Правда елси FILE существует принадлежит существующей группе.
[ -L FILE ] Правда елси FILE существует и это символический ссылка.
[ -N FILE ] Правда елси FILE существует и был изменен с тех пор как был прочитан.
[ -S FILE ] Правда елси FILE существует и это сокет.
[ FILE1 -nt FILE2 ] Правда, если файл FILE1 изменялся чаще чем FILE2, или есои FILE1 существует, а FILE2 нет.
[ FILE1 -ot FILE2 ] Правда, если файл FILE1 старше чем FILE2, или FILE1 существует, а FILE2 нет.
[ FILE1 -ef FILE2 ] Правда, если FILE1 и FILE2 относятся к одному устройству и номеру инода.
[ -o OPTIONNAME ] Правда если shell опция "OPTIONNAME" включена.
[ -z STRING ] Правда если длинна "STRING" равна 0.
[ -n STRING ] or [ STRING ] Правда если длинна "STRING" не равна 0.
[ STRING1 == STRING2 ] Правда если выражения эквивалентны.
[ STRING1 != STRING2 ] Правда если выражения не эквивалентны.
[ STRING1 < STRING2 ] Правда если "STRING1" лексикографически упорядоченно до "STRING2".
[ STRING1 > STRING2 ] Правда если "STRING1" лексикографически упорядоченно после "STRING2".
[ ARG1 OP ARG2 ] "OP" это один из следующих параметров -eq, -ne, -lt, -le, -gt or -ge. Эти бинарные арифметические
операторы возвращают результат "правда" если "ARG1" эквивалентен(-eq), не эквивалентен(-ne), меньше чем(-lt),
меньше или эквивалентен(-le), больше чем(-gt), больше или эквивалентно(-ge) к "ARG2". 
[ ! EXPR ] правда если выражение EXPR не справедливо.
[ ( EXPR ) ] возвращает значение EXPR. Это может быть использовано для изменения приоритета операторов.
[ EXPR1 -a EXPR2 ] правда, если оба выражения EXPR1 и EXPR2 справедливы.
[ EXPR1 -o EXPR2 ] правда, если хотя бы одно выражение EXPR1 или EXPR2 справедливы.

Pojďme přejít k příkladům. Vytvoříme skript, který určí, zda je zadané číslo kladné nebo záporné:

#!/bin/bash
read -p "Введите число : " n
if [ $n -ge 0 ];
then
      echo "$n положительное число."
else
      echo "$n отрицательное число."
fi

další příklad, určíme, zda zadaný uživatel existuje:

#!/bin/bash
read -p "Введите имя пользователя : " USER
if ! grep $USER /etc/passwd
then
      echo "$n не существует."
else
      echo "$n существует."
fi

Znak vykřičníku před příkazem grep $USER /etc/passwd znamená, že podmínka bude splněna, pokud uživatel neexistuje. Nyní tento skript přepišme tak, abychom použili pouze speciální parametr $?, který jsme probírali v třetí lekci:

#!/bin/bash
read -p "Введите имя пользователя : " USER
grep $USER /etc/passwd
if [ $? -ne 0 ];
then
      echo "$n не существует."
else
      echo "$n существует."
fi

Příklad použití porovnávání řetězců. Skript zkontroluje, zda jste root:

#!/bin/bash
if [ "$(whoami)" != 'root' ]; then
        echo "У вас нет прав для запуска $0."
        exit 1;
fi

Tento skript lze zkrátit:

#!/bin/bash
[ "$(whoami)" != 'root' ] && ( echo У вас нет прав для запуска; exit 1 )

Můžete také použít regulární výrazy. Například nechť náš skript určí, zda zadaný text obsahuje písmeno „č“:

#!/bin/bash
LATTER="ч"
read -p "Введите предложение : " STR
if [[ "$STR" == *$LATTER* ]];
then
      echo "$LATTER найдено."
else
      echo "$LATTER не найдено."
fi

Pár slov k použití dvojitých a jednoduchých hranatých závorek. Při použití dvojitých závorek nebudou vaše proměnné rozděleny na více samostatných slov, pokud jste použili mezeru. Například proměnná VAR="var with space" zůstane celistvá.

Poznámka: příspěvek mohl vzniknout s pomocí AI a lidskou redakcí. Odpovědný: Dmytro Lomaka, Kaltenkirchen.