Условие — это тестовое выражение, результатом которого является Истина или Ложь. Если это True, сценарий продолжится в одном направлении. Если это False, сценарий продолжится другим способом. Условие может использоваться, например, чтобы узнать, существует ли файл. Другое условие может заключаться в том, чтобы узнать, меньше ли число для переменной другого числа для другой переменной. На самом деле условий много, и они разбиты по категориям. Условие кодируется особым образом. Условия используются в конструкциях if и конструкциях цикла.
В этой статье объясняется, как условия кодируются и используются в конструкциях if. Аналогичным образом условия используются в конструкциях петель. В Bash True — это статус выхода 0, а False — статус выхода 1.
- if-Construct
- if
- else
- elif
- Else, условие по умолчанию
- Тестовая команда
- Упрощенная команда регистра
- Select упрощенная команда
- Операторы Not Equal To и Logical Not
- Некоторые предопределенные унарные условные выражения
- Операторы
- Less Than операторы
- Оператор меньше или равно
- Операторы больше
- Оператор больше или равно
- Таблицы истинности
- Одно выражение
- Два выражения or’ed
- Два выражения and’ed
- Логический оператор ИЛИ
- Логический оператор И
- Заключение
if-Construct
if
Эта конструкция начинается с зарезервированного слова «if» и заканчивается зарезервированным словом «fi», которое означает «if», написанное противоположным образом. Рассмотрим следующий код:
theVar=15
if [ $theVar -eq 15 ]; then
echo I am studying Bash.
fi
Результат:
I am studying Bash.
Условие — «$ theVar -eq 15», что означает, что значение $ theVar равно 15. Символ -eq означает, что равно. Условие заключено в квадратные скобки. Между [и условием должен быть пробел, а также должен быть пробел между условием и], как показано выше.
Фактически, [условие] означает испытание. Это означает проверку, является ли условие истинным или ложным. Если это True, то сделайте то, что находится в теле конструкции.
Примечание. Перед употреблением зарезервированного слова «then» ставится точка с запятой. В теле конструкции if здесь только одна команда. У него может быть более одной команды. Все это будет выполнено, если условие истинно.
Единственная точка с запятой в приведенном выше коде может быть опущена, если слово «затем» введено в следующей строке, как в следующем коде:
theVar=15
if [ $theVar -eq 15 ]
then
echo I am studying Bash.
fi
В условии в Bash операторы и операнды являются аргументами. Итак, $ theVar, -eq и 15 являются аргументами. Если все аргументы являются арифметическими, то для ограничения условия можно использовать двойные круглые скобки, как показано в следующем коде:
theVar=15
if (($theVar == 15)); then
echo I am studying Bash.
fi
Здесь == означает, что равно.
else
Итак, если условие истинно, тело конструкции if будет выполнено.
Что делать, если условие ложно? Если условие ложно, тело не будет выполнено; но в результате может быть выполнено другое тело. Это другое тело вводится зарезервированным словом «else».
Следующий код иллюстрирует это:
theVar=17
if [ $theVar -eq 15 ]; then
echo I am studying Bash.
else
echo I am doing something else.
fi
Результат:
I am doing something else.
Здесь два тела: тело if и тело else. Поскольку $ theVar (17) не равно 15, выполняется тело else. Здесь зарезервированное слово «fi» стоит в конце общей конструкции. Слово «fi» всегда стоит в конце любой конструкции if, как показывают примеры кода ниже:
В приведенном выше коде выполняется одно из двух тел: если условие истинно, выполняется тело if. В противном случае выполняется тело else.
elif
«elif» означает «иначе, если».
Возможно ли иметь более двух тел в более крупной конструкции if, чтобы выполнялось только одно тело? Да, это возможно! Для этого хотя бы один раз используйте зарезервированное слово «elif» вместо «else». Следующий код иллюстрирует это:
theVar=1500
if [ $theVar -eq 15 ]; then
echo Number is small.
elif [ $theVar -eq 150 ]; then
echo Number is medium.
elif [ $theVar -eq 1500 ]; then
cho Number is large.
elif [ $theVar -eq 15000 ]; then
echo Number is very large.
fi
Результат:
Number is large.
В этом коде четыре тела: тело if и три тела elif. У каждого тела есть состояние. Для четырех тел (включая if-body) выполняется первое, чье условие равно True. Оценка начинается сверху.
Else, условие по умолчанию
Теперь читатель знает, как казнить одно тело из множества разных тел.
Что делать, если ни одно условие не является истинным? Разве не должно быть тела по умолчанию для выполнения, если ни одно из условий не истинно? Что ж, возможно выполнение тела по умолчанию, если ни одно из условий не истинно. Это тело кодируется в конце полной конструкции if и вводится зарезервированным словом «else».
Следующий код иллюстрирует это, где theVar = 15000:
theVar=150000
if [ $theVar -eq 15 ]; then
echo Number is small.
elif [ $theVar -eq 150 ]; then
echo Number is medium.
elif [ $theVar -eq 1500 ]; then
echo Number is large.
elif [ $theVar -eq 15000 ]; then
echo Number is very large.
else
echo Number is extremely large.
fi
Результат:
Number is extremely large.
Примечание. Это «else» не имеет условия, а также не использует зарезервированное слово «then».
Помните, что у каждого тела может быть более одной команды. Приведенный выше код является примером полной конструкции if.
Тестовая команда
Заменой команды [является команда test. Следующий код иллюстрирует это:
theVar=15
if test $theVar -eq 15; then
echo I am studying Bash.
fi
Результат:
I am studying Bash.
Обратите внимание, что для тестовой команды нет открытия или закрытия].
Упрощенная команда регистра
Команда case похожа на упрощенную команду if-elif-else.
Однако здесь переменная должна соответствовать второму операнду в условии. Вышеупомянутая команда if-elif-else с предложением по умолчанию заменяется следующей командой case, но с theVar = 1500:
theVar=1500
case $theVar in
(15)
echo Number is small. ;;
(150)
echo Number is medium. ;;
(1500)
echo Number is large. ;;
(15000)
echo Number is very large. ;;
(*)
echo Number is extremely large. ;;
esac
Результат:
Number is large.
Составная команда case начинается с зарезервированного слова case и заканчивается зарезервированным словом esac, которое является обратным написанием слова case. В предыдущем коде есть два операнда: первый операнд, theVar, за которым следует оператор, -eq, а затем второй операнд, который представляет собой число, например 15. Здесь первый операнд вводится только один раз, в первая строка. За ним следует зарезервированное слово in. После зарезервированного слова in необходимо нажать клавишу Enter для перехода на новую строку.
Каждое предложение начинается со второго операнда, а затем следует его тело. Предложение здесь состоит из второго операнда, за которым следует группа команд. В этом сценарии каждое предложение содержит только одну команду, но их может быть несколько. Последняя команда каждого предложения должна заканчиваться на «;;». Предложение также может заканчиваться «; &» или «;; &», как показано в следующих примерах.
Примечание: в предложении по умолчанию есть второй операнд, который в этой ситуации *. * Соответствует чему угодно.
Select упрощенная команда
Команда выбора — это составная команда. Он работает со списком (или массивом). Когда выполняется команда выбора, значения списка или массива отображаются на терминале. Каждому значению предшествует число. Первое значение на дисплее имеет номер 1; второе значение имеет номер 2; третья пронумерована как 3; и так далее. Этот дисплей представляет собой вертикальное меню.
Внизу списка, на дисплее (терминале), специальная подсказка #? отображается, а справа от него мигающий курсор. Этот мигающий курсор ожидает, пока пользователь компьютера наберет любое число из (вертикального) списка и нажмет Enter. Когда пользователь вводит число, выбирается соответствующее значение. Теперь это значение может быть отправлено сценарием в качестве аргумента функции. Будет предоставлен пример.
Если бы команда break была последней командой в составной команде select, то после того, как пользователь введет номер, сценарий продолжил бы работу.
Синтаксис команды выбора:
select name [in list]
do
[commands]
done
При этом «select», «in», «do» и «done» являются зарезервированными словами. Слово «список» — это массив или простой список. Слово «имя» относится к элементу, который будет выбран в списке.
Читателю следует попробовать следующий код, введя любой номер из списка, когда появится специальная подсказка:
animals=(dog bat rat pig cat)
select item in ${animals[@]}
do
echo You selected «$item« whose number is $REPLY .
break
done
Первоначальное отображение должно быть:
1) dog
2) bat
3) rat
4) pig
5) cat
#?
Если читатель (пользователь) набирает 2 и нажимает Enter, то вывод (второй дисплей) будет:
Вы выбрали «летучую мышь» с номером 2.
«$ REPLY» — это предопределенная переменная, в которой хранится число, введенное пользователем.
Примечание: Использование команды break в составной команде выбора выше.
Операторы Not Equal To и Logical Not
Not Equal оператор
Есть два оператора «не равно»: «! =» И «ne». У них разные контексты применения. См. Ниже:
По сути, оператор неравенства возвращает True, если его правый операнд (выражение) имеет значение False.
Бинарное выражение — это выражение, у которого по обе стороны от оператора есть по одному операнду. В операторах «не равно» есть два операнда, по одному с каждой стороны.
Следующий код иллюстрирует использование оператора «не равно»:
theVar=14
if [ $theVar -ne 15 ]; then
echo I am not studying Bash.
fi
Результат:
I am not studying Bash.
Logical Not оператор
Логический оператор Not — «!». Если правильный операнд на «!» равно False, тогда результат будет True. Если правильный операнд на «!» True, то результат — False.
Унарное выражение — это выражение, у которого по обе стороны от оператора есть только один операнд. Операнд может быть слева или справа. С логическим оператором Not операнд находится справа. Следующий код иллюстрирует использование логического оператора Not:
if [ ! -d «myDir» ]; then
mkdir «myDir»
fi
Если каталог «myDir» не существует, он будет создан. -D «myDir» означает возврат True, если каталог существует, или False, если каталог не существует. Если False, тогда, когда перед ним стоит «!», Результатом для условия будет True. Тело этой конструкции выполняется, только если результатом условия является True.
Некоторые предопределенные унарные условные выражения
В следующих выражениях слово «файл» следует заменить именем файла или именем каталога. Выражения можно использовать, как в приведенном выше условии.
-a file
Возвращает True, если файл существует.
-b файл
Примером блочного файла является файл изображения. Это возвращает True, если файл существует, и это блочный файл.
-c файл
Возвращает True, если файл существует, и это текстовый файл.
-d файл
Возвращает истину, если файл существует и является каталогом.
-e файл
Возвращает True, если файл существует, и не имеет значения, является ли это текстовым файлом или файлом блока.
-f файл
Примеры обычных файлов: исполняемые файлы, текстовые файлы и файлы изображений. Это возвращает True, если файл существует, и это обычный файл.
-r файл
Возвращает True, если файл существует и доступен для чтения.
-s файл
Возвращает True, если файл существует и его размер больше нуля.
-t fd
Возвращает True, если файловый дескриптор «fd» открыт и ссылается на терминал.
-w файл
Возвращает True, если файл существует и доступен для записи.
-x файл
Возвращает True, если файл существует и является исполняемым.
-N файл
Возвращает True, если файл существует и был изменен с момента последнего чтения.
В следующем примере проверяется, существует ли файл с именем filenam.txt:
if [ -e «filenam.txt» ]; then
echo File exist.
else
echo File does not exist!
fi
Операторы
Операторы Equal
Equal являются «-eq» и »==«. «-Eq» используется, когда оба операнда являются числами, а «==» используется, когда оба операнда являются строками. Пример:
if [ 25 -eq 25 ]; then
echo Numbers are equal.
fiif [ «one» == «one» ]; then
echo Strings are equal.
Fi
Результат:
Numbers are equal.
Strings are equal.
Not Equal оператор
Операторами «не равно» являются «-ne» и «! =». «-Ne» используется, когда оба операнда являются числами, а «! =» Используется, когда оба операнда являются строками. Пример:
if [ 24 -ne 26 ]; then
echo Numbers are not equal.
fiif [ «one» != «something» ]; then
echo Strings are not equal.
fi
Результат:
Numbers are not equal.
Strings are not equal.
То есть, если 24 не равно 26, то выполняется соответствующее тело. В противном случае он не выполняется. И если «единица» не равна «чему-то», то также выполняется соответствующее тело. В противном случае он не выполняется.
Less Than операторы
Операторы «меньше» — это «-lt» и «<„. “-Lt» используется, когда оба операнда являются числами, а «<» используется, когда оба операнда являются строками. Пример:
if [ 13 -lt 17 ]; then
echo First operand is less than second operand.
fiif [[ «abcd» < «bcde» ]]; then
echo First operand is less than second operand.
fi
Результат:
First operand is less than second operand.
First operand is less than second operand.
Примечание. Для строк использовалось условие [[arguments]]. Ограничивающие пробелы по-прежнему соблюдаются. Кроме того, при сравнении строк ASCII цифры предшествуют строчным буквам, которые, в свою очередь, предшествуют прописным.
Оператор меньше или равно
Оператор «меньше или равно» — «-le». На данный момент оператор «меньше или равно» существует только для чисел. Его еще предстоит разработать для струнных. Пример числа:
if [ 18 -le 17 ]; then
echo First operand is less than or equal to second operand.
fi
Нет выхода; поскольку 18 больше 17.
Операторы больше
Операторы «больше» — «-gt» и «>». «-Gt» используется, когда оба операнда являются числами, а «>» используется, когда оба операнда являются строками. Пример:
if [ 17 -gt 13 ]; then
echo First operand is greater than second operand.
fiif [[ «bcde» > «abcd» ]]; then
echo First operand is greater than second operand.
fi
Результат:
First operand is greater than second operand.
First operand is greater than second operand.
Примечание. Для строк использовалось условие [[arguments]]. Ограничивающие пробелы все еще присутствуют. Кроме того, при сравнении строк ASCII цифры предшествуют строчным буквам, которые, в свою очередь, предшествуют прописным.
Оператор больше или равно
Оператор «больше или равно» — «-ge». На данный момент оператор «больше или равно» существует только для чисел. Его еще предстоит разработать для струнных. Пример числа:
if [ 18 -ge 17 ]; then
echo First operand is greater than or equal to second operand.
fi
Результат:
First operand is greater than or equal to second operand.
Таблицы истинности
Все вышеперечисленные условия имеют только одно выражение, которое приводит к True или False.
Одно выражение
Таблица истинности для одного выражения:
ложь = ложь
истина = истина
Не ложь = правда
Не правда = ложь
Два выражения or’ed
Можно иметь два выражения or’ed. Таблица истинности для двух выражений, которые являются OR’ed, выглядит следующим образом:
ложь ИЛИ ложь = ложь
ложь ИЛИ истина = правда
правда ИЛИ ложь = правда
правда ИЛИ правда = правда
Два выражения and’ed
Можно иметь два выражения и’ed. Таблица истинности для двух выражений, обозначенных «и»:
false AND false = false
false AND true = false
true AND false = false
true AND true = true
Читатель должен запомнить эти таблицы истинности. Его можно расширить до трех и более выражений. Ниже приведены примеры:
Логический оператор ИЛИ
Логический оператор «ИЛИ» — «||».. Таблица истинности для двух выражений логического ИЛИ, скопированная сверху:
ложь || ложь = ложь
ложь || истина = истина
истина || ложь = истина
истина || правда = правда
Опять же, false относится к одному выражению, а true также относится к другому выражению. Следующий код создает таблицу истинности ИЛИ:
theVar=15
if [[ ($theVar -eq 14 || $theVar -eq 14) ]]; then
echo true.
else
echo false
fiif [[ ($theVar -eq 14 || $theVar -eq 15) ]]; then
echo true
else
echo false
fiif [[ ($theVar -eq 15 || $theVar -eq 14) ]]; then
echo true
else
echo false
fiif [[ ($theVar -eq 15 || $theVar -eq 15) ]]; then
echo true
else
echo false
fi
Результат:
false
true
true
true
Примечание : использование команды [[и круглых скобок. Также обратите внимание на ограничивающие пробелы.
Логический оператор И
Логический оператор И — «&&». Таблица истинности для двух выражений логического И, скопированная сверху, выглядит так:
false && false = false
false && true = false
true && false = false
true && true = true
Опять же, false относится к одному выражению, а true также относится к другому выражению. Следующий код создает таблицу истинности AND:
theVar=15
if [[ ($theVar -eq 14 && theVar -eq 14) ]]; then
echo true.
else
echo false
fiif [[ ($theVar -eq 14 && $theVar -eq 15) ]]; then
echo true
else
echo false
fiif [[ ($theVar -eq 15 && $theVar -eq 14) ]]; then
echo true
else
echo false
fiif [[ ($theVar -eq 15 && $theVar -eq 15) ]]; then
echo true
else
echo false
fi
Результат:
false
false
false
true
Примечание : использование команды [[и круглых скобок. Также обратите внимание на ограничивающие пробелы.
Заключение
Условие — это команда с аргументами. Аргументы — это операнды и операторы. Аргументы могут составлять одно выражение, два выражения или несколько выражений. Если общее условие приводит к True, сценарий движется в одном направлении. Если общее условие приводит к False, сценарий перемещается в альтернативном направлении. Условия используются в конструкциях if и конструкциях цикла. Для любого языка программист должен знать, как кодировать условие для этого языка.