Условные операторы ветвления и операторы цыкла в оболочке Korn

Оболочка Korn поддерживает несколько условных операторов, подобные тем, что поддерживаются в обычных языках программирования вроде C и Java. В их число входят условные структуры, которые подразумевают использование операторов if, и итеративные структуры (также называемые структурами повторения), которые подразумевают применение операторов while и for для прогона множества шагов в цикле на основании удовлетворения определенных условий. Помимо этих структур также существуют специальные команды, позволяющие прерывать или выходить из циклов при необходимости.

Условное ветвление

Конструкции условного ветвления позволяют указывать программе оболочки выполнять альтернативные задачи на основании удовлетворения или не удовлетворения определенного условия. Например, с их помощью можно заданную команду, если определенный файл существует, и выдавать сообщение об ошибке, если такового нет.

Наиболее распространенной среди конструкций условного ветвления во всех типах программирования является условная структура if-then-else. В программировании для UNIX и Linux она имеет вид if-then-else-fi и подразумевает выполнение одного из двух (или большего количества) действий в зависимости от результатов проверки условия.

Синтаксис структуры if-then-else-fi выглядит следующим образом: 

if условие
then
Действие А
else
Действие Б
fi

Слово then должно обязательно располагаться на второй строке. Еще стоит обратить внимание на то, что завершается эта управляющая структура словом fi (которое представляет собой написанное наоборот слово if).

Ниже приведен пример применения структуры if-then-else-fi:

 
#!/usr/bin/sh
LOGFILE= /tmp/dba/error.log
export LOGFILE
grep ORA- $LOGFILE > job.err
if [ `cat job.err|wc -l` -gt 0 ]
then
mailx -s "Ошибки в задании резервного копирования" Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. < job.err
else
mailx -s "Задание резервного копирования выполнено успешно" Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.
fi

Этот сценарий предусматривает выполнение проверки на предмет того, не были ли в журнале зафиксированы какие-то ошибки во время выполнения резервного копирования баз данных Oracle, а также отправку содержимого файла job.err в виде электронного сообщения администратору баз данных с помощью программы mailx (которая является стандартной программой для работы с электронной почтой в UNIX). Параметр -s указывает mailx, как должна выглядеть строка темы в этом электронном сообщении в случае обнаружения ошибок и в случае их отсутствия.

Циклы

В реальных программах часто требуется выполнять команду несколько раз на основании какого-то условия. Для обеспечения такого поведения в UNIX предусмотрено несколько конструкций цикла, главными из которых являются while-do-done, подразумевающая выполнение команды до тех пор, пока условие остается истинным;for-do-done, подразумевающая выполнение команды установленное количество раз,и until-do-done, подразумевающая выполнение одной и той же команды до тех пор,пока некоторое условие не станет истинным.

В следующих разделах все три эти конструкции рассматриваются более подробно

Цикл while-do-done

В цикле while-do-done перед каждым выполнением содержащихся внутри команд производится проверка условия. Если эта проверка проходит успешно, команды выполняются, а если она не проходит успешно с самого начала, команды не выполняются даже одного раза. Таким образом, данный цикл гарантирует выполнение находящихся внутри него команд только до тех пор, пока (что в английском соответствует слову while) конкретное условие будет оставаться истинным.

Синтаксис цикла while-do-done выглядит следующим образом: 

while условие
do
команды
done

Ниже приведен пример применения цикла while-do-done. Обратите внимание, что команда внутри этого цикла будет выполняться 99 раз (операция отношения lt гарантирует, что до тех пор, пока значение переменной VAR1 будет меньше 100, сценарий будет отображать ее значение на экране с помощью команды echo): 

#!/usr/bin/ksh
VAR1=1
while [ $VAR1 -lt 100 ]
do
echo "значение переменной VAR1 равно: $VAR1"
((VAR1 =VAR1+1))
done

Цикл for-do-done

Цикл for-do-done удобно использовать для обработки списка элементов. Он выполняет содержащиеся внутри него команды для каждого элемента в списке. Обработка продолжается до тех пор, пока список элементов не закончится.

Синтаксис цикла for-do-done выглядит следующим образом:

 
for var in список
do
команды
done

Ниже приведен пример применения цикла for-do-done (буква F в команде for используется как переменная для обработки списка файлов в каталоге):

 #!/usr/bin/sh
## этот цикл позволяет получать перечень всех файлов (не каталогов),
## которые существуют в указанном каталоге
##
for F in /u01/app/oracle
do
if [ -f $F]
then
ls $F
fi
done

Цикл until-do-done

Цикл until-do-done выполняет находящиеся внутри него команды до тех пор, пока определенное условие не станет истинным. Цикл продолжается до тех пор, пока условие остается ложным.

В общем, синтаксис цикла until-do-done выглядит следующим образом:

until условие
do
команды
done 

Ниже приведен простой пример применения цикла until-do-done. В этом примере команда print будет выводить содержащееся внутри кавычек предложение на экран и размещать его на новой строке, потому что включает параметр -n, а команда read — считывать вводимые пользователем данные и помещать их в переменную answer. Таким образом, сценарий будет выполняться до тех пор, пока пользователь не введет ответ “YES”: 

until [[ $answer = "yes" ]];do
print -n "Пожалуйста, подтвердите свое согласие путем ввода ответа \"YES\": "
read answer
print ""
done

Ветвление с помощью case

Структура case довольно сильно отличается от всех остальных условных операторов.Она позволяет программе переходить к определенному сегменту на основании значения конкретной переменной. Значение этой переменной сравнивается с несколькими шаблонами, и в случае обнаружения совпадения с каким-то из них, выполняются команды,ассоциированные с данным шаблоном.

В общем случае, синтаксис команды case выглядит следующим образом: 

case var in
шаблон_1)
команды
;;
шаблон_2)
команды
;;
...
шаблон_n)
команды
;;
esac

Обратите внимание на то, что конец оператора case обозначается словом esac (которое представляет собой то же слово case, только написанное наоборот).

Ниже приведен простой пример применения команды case:

 
#!/usr/bin/sh
echo " Введите b, чтобы отобразить список книг"
echo " Введите t, чтобы отобразить часы работы библиотеки"
echo " Введите e, чтобы выйти из меню"
echo
echo "Введите выбранный вариант: \c"
read VAR
case $VAR in
b/B) book.sh
;;
t/T) times.sh
;;
e/E) logout.sh
;;
*) echo "Неверная клавиша: выберите вариант заново"
esac

 

Вас заинтересует / Intresting for you:

Типы операторов SQL в Oracle
Типы операторов SQL в Oracle 2293 просмотров Александров Попков Tue, 21 Nov 2017, 13:28:01
Операторы SQL Oracle
Операторы SQL Oracle 14394 просмотров Илья Дергунов Sat, 10 Mar 2018, 15:37:39
Версии СУБД Oracle Database 10...
Версии СУБД Oracle Database 10... 5758 просмотров Илья Дергунов Sat, 11 Aug 2018, 11:43:08
Нормализация информации  в баз...
Нормализация информации в баз... 2941 просмотров Ирина Светлова Tue, 21 Nov 2017, 13:28:01
Печать
Войдите чтобы комментировать