Настройка и работа в Linux

         

Управляющие структуры


К управляющим структурам относятся:
1. Конструкция if-fi
2. Конструкция case-esac

Общий синтаксис конструкции if-fi

if список1 then
список2
elif список3 then
   список4
else
   список5
fi

Конструкция if-fi работает так же, как и в других языках программирования.Если список1 (условие) истинный, выполняется список2, иначе выполняется список3 и проверяется его истинность и т.д. Допускается неограниченная вложенность операторов if.
Список – это список команд. Разделителем команд служит символ «;». Список обязательно должен заканчиваться точкой с запятой. Пример списка: ls; dir; cat file;
При программировании на bash есть один подводный камень, относящийся к логическим выражениям. В других языках программирования выражение «истина» обозначается как «true», а «ложь» – как «false». В языке C с выражением «ложь» сопоставляется нулевое значение переменной, а за истину принимается любое ненулеое значение. В bash все немного по-другому. За истину в конструкции if принимается 0, так как 0 – это код нормального завершения программы (команды). Правильнее конструкцию if трактовать так: если код завершения списка команд, задающего условие в конструкции if, равен 0, то будет выполнен список2. Код завершения последней команды можно узнать с помощью переменной $?.
Например,
if [ $? -ne 0 ]; then echo "Ошибка. См. файл протокола"; fi;
В этом примере мы проверяем код завершения последней команды. Если он не равен нулю (-ne), мы выводим сообщение об ошибке. Кроме опции -ne можно использовать такие опции:

  1. -eq – равно
  2. -lt – меньше
  3. -gt – больше
  4. -le – меньше или равно
  5. -ge – больше или равно
Сравнение строк:

  1. = – равно
  2. != – не равно

Символ "!" является символом логической операции NOT (отрицание). Кроме этого символа, можно использовать опции команды -o и –a, которые обозначают логические операции ИЛИ (OR) и И (AND).
Проверить существование файла можно опцией -e, а существование каталога - d.
Все эти опции являются параметрами программы test. Другими словами, вместо квадратных скобок вы можете использовать команду test, поэтому следующие выражения аналогичны

test –e /etc.passwd
[-e /etc/passwd]

Cинтаксис блока выбора (case – выбор):

case значение in
 шаблон1) список1 ;;
 ...
 шаблонN) списокN ;;
esac

Работает этот блок почти также, как в языке С. Однако есть небольшая разница: если найдено совпадение с каким-нибудь шаблоном (например, шаблонN-2) и выполнен соответствующий список команд списокN-2, осуществляется выход из блока. В языке С для достижения этого эффекта нужно было использовать оператор break, иначе выполнялись вы все списки после спискаN-2: списокN-1, списокN.
Вместо дейтсвия по умочанию нужно использовать шаблон *). Этот шаблон будет использоваться, когда не найдено совпадение ни с одним из шаблонов. Например,
case $A in
1) echo "A=1";;
2) echo "A=2";;
*) echo "A<>1 and A<>2";;
esac
 



Содержание раздела