Операторы выбора в bash

 

В принципе, для ветвления, то есть выполнения разных блоков кода при разных условиях вполне достаточно одного оператора с возможностью вложения, но для удобство написания программ в языках программирования обычно бывает несколько операторов с разными возможностями. Bash не исключение. В Нашей шпаргалке мы рассмотрим 3 оператора позволяющих сделать выбор, это: if-fi,case-esac и select. Для написания скрипта вполне достаточно оператора if и циклов, но некоторые вещи становятся гораздо удобнее если пользоваться и другими операторами.

 

Выбор или конструкция if-fi

Тут всё элементарно, как во всех языках программирования (коим bash тоже является). После ключевого слова if помещается выражение возвращающее истину или ложь и в случае если оно вернет истину выполняется блок команд следующий за ключевым словом then после чего выполняются строки следующие за fi (блок else игнорируется). Если условное выражение возвращает ложь, то выполняются команды следующие за ключевым словом else, а блок then игнорируется. Оператор if fi допускает вложенные проверки. Вложенную поверку можно делать в любом месте, а не только в блоках then и else. Когда if и then располагаются в одной строке, то конструкция if должна завершаться точкой с запятой.


Синтаксис:
if [условное выражение]
  then <команды выполняемые в случае если [условное выражение] вернет истину (0)>
  else <команды выполняемые в случае если [условное выражение] вернет ложь не (0)>
fi
Блок else можно пропустить, тогда в случае если <условное выражение> вернет ложь скрипт продолжит выполнятся со строчки следующей за fi

Пример:
if test -e /home/kyrych/readme # Проверяем существует ли файл readme в домашнем каталоге.
  then echo “file exists” # Если существует то выводим соответствующее сообщение.
  else echo “file not found” #Если не существует сообщаем файл не найден.
fi #Всё, работаем дальше.


Пример вложенной проверки:
if -e /home/kyrych/readme # Проверяем существует ли файл readme в домашнем каталоге.
  if test -x /home/kyrych/readme # Проверяем является ли readme исполняемым.
    then echo “yes” # Если является сообщаем yes.
    else echo “no” #Если не является, выводим no.
  fi # Конец вложенной проверки.
  then echo “file exists” # Если существует то выводим соответствующее сообщение.
  else echo “file not found” #Если не существует сообщаем файл не найден.
fi #Всё, работаем дальше.


elif -- это краткая форма записи конструкции else if. Применяется для построения многоярусных инструкций if fi. Просто там где за словом else следует слово if вы пишите elif.


if [ условие ]
  then [команды]
  elif [ условие2]
    then [команды]
  else [команды]
fi

Множественный выбор или конструкция case-esac

case позволяет выполнять тот или иной участок кода, в зависимости от результатов проверки условий. Она является, своего рода, краткой формой записи большого количества операторов if/then/else. Оператор крайне простой в использовании нужно только указать переменную, а затем блоки выполняющиеся при определенном значении этой переменной. Конструкция завершается оператором esac.


Синтаксис:
case "$var" in
"$zn1" )
#Команды выполняющиеся если. $var = $zn1
;;
"$zn2" )
#Команды выполняющиеся если. $var = $zn2
;;
# И далее необходимое количество подобных блоков…..
esac


В качестве условий начала блока можно указывать выражения возвращающие значения.
Заключать переменные в кавычки необязательно.
Каждая строка с условием должна завершаться правой (закрывающей) круглой скобкой ).
Каждый блок команд, отрабатывающих по заданному условию, должен завершаться двумя символами точка-с-запятой ;;.
Блок case должен завершаться ключевым словом esac.

Пример:
case $var in
1)
echo 1;;
2)
echo 2;;
3)
echo 3;;
esac
Думаю комментарии тут излишни.

Множественный выбор или конструкция select

Оператор select предлагает пользователю выбрать один из заданных в качестве списка вариантов. Если в операторе select список не задан, то в качестве списка будет использоваться список аргументов ($@), передаваемый сценарию или функции. По-умолчанию select использует в качестве приглашения к вводу содержимое переменной окружения $PS3 (#? ), которое легко изменить. Этот оператор хорошо подходит для создания меню.


Синтаксис:
select var [in list]
do
#Команды...
break
done
По сути в результате выбора пользователя переменной var присваивается значение выбранного элимента списка.
Если пропустить команду break то получится бесконечный цикл, так что будьте внимательны.


Пример:
select var in 1 2 3 4 5 6
do
echo $var
break
done

Добавить комментарий


Защитный код
Обновить