How to program with Bash: Logical operators and shell expansions If в Bash: от новичка до профессионала
IF THEN ELSE
if условие; then команда вернула 0; else команда вернула не 0; fi if ls /etc/passwd; then echo File OK; else echo No file; fi if условие1; then команды1; elif условие2; then команды2; else команды3; fi if КОМАНД1; then КОМАНДЫ; elif КОМАНД2; then КОМАНДЫ; else КОМАНДЫ; fi if КОМАНД1; then КОМАНДЫ; fi if КОМАНД1; then КОМАНДЫ; fi ≡ КОМАНД1 && КОМАНДЫ
e functional syntax of these comparison operators is one or two arguments with an operator that are placed within square braces, followed by a list of program statements that are executed if the condition is true, and an optional list of program statements if the condition is false:
if [ arg1 operator arg2 ] ; then list or if [ arg1 operator arg2 ] ; then list ; else list ; fi The spaces in the comparison are required as shown. The single square braces, [ and ], are the traditional Bash symbols that are equivalent to the test command:
if test arg1 operator arg2 ; then list There is also a more recent syntax that offers a few advantages and that some sysadmins prefer. This format is a bit less compatible with different versions of Bash and other shells, such as ksh (the Korn shell). It looks like:
if arg1 operator arg2 ; then list
Способы проверки условий
Условие | Описание |
---|---|
-z | строка пуста |
-n | строка не пуста |
=, ( == ) | строки равны |
!= | строки не равны |
-eq | равно |
-ne | не равно |
-lt,(<) | меньше |
-le,(⇐) | меньше или равно |
-gt,(>) | больше |
-ge,(>=) | больше или равно |
! | отрицание логического выражения |
-a,(&&) | логическое «И» |
-o,(||) | логическое «ИЛИ» |
-f | проверка существования файла |
Команда test
Команда test проверяет типы файлов и сравнивает значение. Возвращает 0 если True, 1 если False Больше информации о test
# Сравнение переменной со строкой test "$MY_VAR" == "/bin/zsh" # Проверка, если переменная пустая test -z "$GIT_BRANCH" # Проверка на существование файла test -f "path/to/file_or_directory" # Проверка на существование папки test ! -d "path/to/directory" # If A is true, then do B, or C in the case of an error (notice that C may run even if A fails): test condition && echo "true" || echo "false"
Примеры
&& | запустить следующую команду, если первая вернула True |
|| | |
! | отрицание |
Команды выполняются слева направо. true && true ||false && true && echo "ok" Можно использовать скобки true && true ||(false && true) && echo "ok"
test команда проверяет различные условия, связанные с файлами и возвращает логический аттрибут
pgrep sshd && echo "OK" | Проверить, что процесс sshd запущен и вывести OK |
$? | возвращает код ошибки |
0 - true, 1 - ошибка
Примеры
pgrep sshd && echo "OK" | Проверить, что процесс sshd запущен и вывести OK |