if [ условие ]then если условие справедливо выполнить все команды до else или до fielse если условие не справедливо выполнить все команды до fifi |
It is very important to remember that your construct must always end with the word fi!
Expressions used with if
The table below contains operators that execute the test command or a set of commands. These operators are enclosed in square brackets [] to check if a condition is met.
[ -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 справедливы. |
Let's move on to examples. Let's create a script that will determine whether the number we entered is positive or negative:
#!/bin/bashread -p "Введите число : " nif [ $n -ge 0 ];then echo "$n положительное число."else echo "$n отрицательное число."fi |
Another example: let's determine whether the user we entered exists:
#!/bin/bashread -p "Введите имя пользователя : " USERif ! grep $USER /etc/passwdthen echo "$n не существует."else echo "$n существует."fi |
The exclamation mark before grep $USER /etc/passwd indicates that the condition is satisfied if the user does not exist. Now, let's rewrite this script using only the special variable $? that we discussed in the third lesson:
#!/bin/bashread -p "Введите имя пользователя : " USERgrep $USER /etc/passwdif [ $? -ne 0 ]; then echo "$n не существует."else echo "$n существует."fi |
Example of string comparison. The script will check whether you are root or not:
#!/bin/bashif [ "$(whoami)" != 'root' ]; then echo "У вас нет прав для запуска $0." exit 1;fi |
This script can be rewritten more concisely:
#!/bin/bash[ "$(whoami)" != 'root' ] && ( echo У вас нет прав для запуска; exit 1 ) |
You can also use regular expressions. For example, let our script determine whether the entered text contains the letter "ч":
#!/bin/bashLATTER="ч"read -p "Введите предложение : " STRif [[ "$STR" == *$LATTER* ]]; then echo "$LATTER найдено."else echo "$LATTER не найдено."fi |
A few words about using double and single square brackets. When using double brackets, your variables will not be split into separate words if you used spaces. For example, the variable VAR="var with space" will remain a single entity.
