Искусство программирования на языке сценариев командной оболочки




Программирование на языке сценариев командной оболочки - стр. 36


Обратите внимание: [[ -- это зарезервированное слово, а не команда.

Bash исполняет [[ $a -lt $b ]] как один элемент, который имеет код возврата.

Круглые скобки (( ... )) и предложение let ... так же возвращают код 0, если результатом арифметического выражения является ненулевое значение. Таким образом, арифметические выражения могут учавствовать в операциях сравнения.

Предложение let "1<2" возвращает 0 (так как результат сравнения "1<2" -- "1", или "истина") (( 0 && 1 )) возвращает 1 (так как результат операции "0 && 1" -- "0", или "ложь")

Условный оператор if проверяет код завершения любой команды, а не только результат выражения, заключенного в квадратные скобки.

if cmp a b &> /dev/null # Подавление вывода. then echo "Файлы a и b идентичны." else echo "Файлы a и b имеют различия." fi

if grep -q Bash file then echo "Файл содержит, как минимум, одно слово Bash." fi

if COMMAND_WHOSE_EXIT_STATUS_IS_0_UNLESS_ERROR_OCCURRED then echo "Команда выполнена успешно." else echo "Обнаружена ошибка при выполнении команды." fi

Оператор if/then допускает наличие вложенных проверок.

if echo "Следующий *if* находится внутри первого *if*."

if [[ $comparison = "integer" ]] then (( a < b )) else [[ $a < $b ]] fi

then echo '$a меньше $b' fi

Это детальное описание конструкции "if-test" любезно предоставлено Stephane Chazelas.

Пример 7-1. Что есть "истина"?

#!/bin/bash

echo

echo "Проверяется \"0\"" if [ 0 ] # ноль then echo "0 -- это истина." else echo "0 -- это ложь." fi # 0 -- это истина.

echo

echo "Проверяется \"1\"" if [ 1 ] # единица then echo "1 -- это истина." else echo "1 -- это ложь." fi # 1 -- это ложь.

echo

echo "Testing \"-1\"" if [ -1 ] # минус один then echo "-1 -- это истина." else echo "-1 -- это ложь." fi # -1 -- это истина.




Содержание  Назад  Вперед