- •Сценарии оболочки
- •Запуск сценария
- •Область видимости переменных
- •Средства ввода-вывода
- •Вычисление арифметических выражений
- •Управляющие конструкции
- •Условный оператор
- •Команда test
- •1. Условия проверки файлов:
- •2. Условия проверки строк:
- •3. Условия сравнения целых чисел:
- •Оператор выбора
- •Операторы цикла Язык оболочки позволяет организовывать циклическое выполнение команд. В распоряжение пользователю предлагается 4 варианта циклов: while, until, for и select.
Управляющие конструкции
Простая команда – это последовательность слов, разделенная пробелами. Первое слово является именем команды, которая будет выполняться, а остальные будут переданы ей как аргументы. Имя команды передается ей как аргумент номер 0 (т.е. имя команды является значением $0). Значение, возвращаемое простой командой - это ее статус завершения, если она завершилась нормально, или (восьмеричное) 200+статус, если она завершилась аварийно.
Список – это последовательность одной или нескольких команд, разделенных символами ;, &, && или || и быть может заканчивающаяся символом ; или &. Из четырех указанных операций ; и & имеют равные приоритеты, меньшие, чем у && и ||. Приоритеты последних также равны между собой. Символ ; означает, что команды будут выполняться последовательно, а & - параллельно. Операция && (||) означает, что список, следующий за ней будет выполняться лишь в том случае, если код завершения предыдущего конвейера нулевой (ненулевой).
Команда – это либо простая команда, либо одна из управляющих конструкций. Кодом завершения команды является код завершения ее последней простой команды.
Условный оператор
if <условие1>
then
<список1>
[ elif < условие2>
then
<список2> ]
. . .
[ else
<список3> ]
fi
Выполняется <условие1> и, если код его завершения 0, то выполняется <список1>, иначе - <условие3> и, если и его код завершения 0, то выполняется <список2>. Если же это не так, то выполняется <список3>. Части elif и else могут отсутствовать.
В качестве условий могут использоваться обычные команды, однако наиболее часто – это вызов одной или нескольких команд test в виде
test выражение
или просто [ выражение ]. Обратите внимание: пробелы, отделяющие выражение от квадратных скобок, обязательны. Подробно команда test рассмотрена ниже.
Пример. Программа, которая вызывается с двумя параметрами и определяет их сумму.
#!/bin/bash
n=$# # определяем количество переданных параметров
if [ n==0 ] # если не передано ни одного
then
echo Input a b # выводим приглашение к вводу параметров
read a b # читаем параметры в переменные а и b
elif [ n==1 ] # иначе, если передан один параметр
then
a=$1 # переменной а придаем его значение
echo Input b # выводим приглашение к вводу второго параметра
read b # читаем параметр в переменную b
elif [ n==2 ] # иначе, если переданы оба параметра
then
a=$1 переменной а придаем значение первого параметра
b=$2 # переменной b придаем значение первого параметра
else # иначе (если не передано ни одного параметра)
echo Usage: $0 [a [b]] # выводим справку по работе программы
fi # конец условного оператора
s=$((a+b)) # или s=`expr $a + $b` - вычисляем сумму чисел,
# поместив ее в переменную s
echo $s # выводим результат
Команда test
Команда test применяется для проверки условия. Формат вызова:
test <выражение>
или просто
[ <выражение> ]
Команда test вычисляет <выражение> и, если его значение – истина, возвращает код завершения 0 (true); иначе – ненулевое значение (false). Ненулевой код завершения возвращается и если опущены аргументы.
Примечание: на самом деле оболочка будет распознавать эту команду по открывающей скобке «[», как слову, соответствующему команде test. Уже этого достаточно, чтобы предупредить о распространенной ошибке: между скобками и содержащимся в них условием обязательно должны быть пробелы. Пробелы должны быть и между значениями и символом сравнения или операции (как и в команде expr) (не путать с противоположным требованием для присваивания значений переменным!).
В сценариях оболочки используются условия различных типов.