Конструкция if

Для проверки условий в скрипте предназначена конструкция if. Общий синтаксис конструкции if в упрощенном виде, следующий:

if [ условие ]; then

блок команд

else

блок команд

fi

Ключевые элементы конструкции это if, then, else, fi. Точка с запятой нужна только в том случае если на одной строке расположено более одного ключевого элемента конструкции if. Если каждый ключевой элемент будет расположен на новой строке, то точка с запятой не нужна. Рассмотрим следующий практический пример:

#!/bin/bash

STR=”Hello world”

if [ $STR = "Hello world" ]

then

echo YES

else

echo NO

fi

В примере выше есть ошибка. В начале упоминалось, что в операциях сравнения желательно заключать в кавычки конструкции $STR. В нашем случае в результате первой подстановки получим следующее:

[ Hello world = "Hello world" ]

 

Логика работы [ ] (аналог команды test) следующая: После открывающей скобки [ обязательно пробел (первый), далее до следующего пробела (второго) первое сравниваемое значение, далее оператор сравнения (например =), далее пробел (третий) и от него до следующего пробела (четвертый) второе сравниваемое значение. Сразу после четвертого пробела закрывающая скобка ] . У нас же получилось, нарушение данного правила в результате того, что в переменной STR есть пробелы. Если заключить $STR в двойные кавычки “$STR” то ошибки не будет. Исправьте скрипт и проверьте.

Конструкция сравнения [ ] выдает в результате число: 0 - если условие верное, и отличное от нуля, если неверное. Если результатом будет ноль, то выполнятся команды от then до следующей ключевой конструкции, если результат отличный от нуля, то выполнится блок команд от else до следующей ключевой конструкции. Кстати использовать конструкцию [ ] можно не только в if, но и отдельно, далее рассмотрим подобные примеры. Также хочу отметить, что [ ] более новая конструкция и имеет более старый аналог, который также часто встречается в скриптах. Это команда test. Строку if [ $STR = "Hello world" ] можно записать так: if test $STR = “Hello world”.

Чтобы посмотреть встроенную справку о конструкции if, необходимо в интерпретаторе набрать help if. Тогда будет отображена краткая справка о синтаксисе.

Еще раз обращаю внимание на пробелы в [ ]. Чтобы не забывать об этом запомните, что [ это просто команда (наподобие любой другой команды linux), а после команды всегда идет пробел и далее ключи или параметры.