
- •Программирование на языке shell
- •При рассмотрении команд в UNIX по сути использовался интерактивный режим взаимодействия с shell,
- •-командный процессор Борна – sh (более старый);
- •Любая хранимая в файле команда или последовательность команд системы UNIX
- •1. Этот метод основан на переадресации ввода не с терминала, а с файла.
- •Здесь уже можно передавать аргументы, если Вы их предусмотрели.
- •shell переменные
- •Присваивание значений переменным
- •Если необходимо присвоить переменной значение, содержащее пробелы, знаки табуляции и символы новой строки,
- •то будет выдано сообщение об ошибке
- •Вновь создаваемые переменные локальны, то есть, эффективны только в пределах текущего экземпляра shell.
- •Использование переменных
- •Если имя переменной заключить в фигурные скобки, то её выведенное значение будет сопровождаться
- •Интерпретатор shell автоматически
- •Эти переменные равнозначны переменным, создаваемым пользователем.
- •Использование shell-переменных в интерактивном режиме
- •После этого мы можем:
- •Строки поиска пути
- •В строке поиска пути каталоги разделены
- •Например,
- •Отмена специального смысла символа
- •3) Путем заключения всех символов последовательности в двойные кавычки.
- •Одинарные кавычки ‘’ указывают
- •Пример:
- •Апостроф ` наклонная одинарная кавычка (расположена на клавише, что и
- •Результат может быть такой: /bin/cat
- •Для отмены специального смысла одного символа - надо применить
- •Команда set
- •Команда set имеет несколько опций, но Мы рассмотрим только одну:
- •Доступ к отдельным аргументам
- •Выход команды date становится последовательностью аргументов для команды set и поэтому на экране
- •После выполнения команды set `date` её результат будет присвоен последовательности параметров
- •Доступ к другим позиционным параметрам с номерами, больше девяти,
- •Путем ввода следующей команды можно получить доступ ко всем позиционным параметрам вызова:
- •Простые условные операторы
- •Команда [ ] является другим именем
- •Команда test может использоваться для трех объектов:
- •Опции имеют вид:
- •B.Сравнение числовых величин
- •C. Сравнение цепочек символов
- •Если цепочка символов заключена в
- •Пример:
- •II.Команды true и false
- •Команды && и II позволяют контролировать выполнение.
- •if if_list then then_list fi
- •Здесь elif выполняется, если if_list не равен нулю, и состоит в следующем:
- •Ветвление по нескольким направлениям case
- •Команда case сравнивает шаблон string с каждым шаблоном s1,s2... sn.
- •Одному списку команд может соответствовать несколько текстовых образцов, разделенных вертикальной
- •Построение циклов
- •Пример.
- •Например, необходимо инвертировать порядок списка аргументов.
- •Кроме аргументов командной строки и позиционных параметров, могут обрабатываться файлы, используя знаки подстановки:
- •Пустая строка
- •Данный пример показывает, что shell будет обрабатывать это, так как двоеточие
- •Прерывание цикла break
- •Если переменная level отсутствует или равна 1, то прерывается цикл 1.
- •while true
- •Если переменная level имеет значение 2, то выполнение будет продолжено с оператора цикла
- •Фоновое выполнение цикла
- •Выход из программы exit
- •Переназначение ввода/вывода и циклы
- •Здесь все выходные данные всех команд в цикле направляются в единый файл (стандартный
- •Можно связать циклы и конвейеры:
- •b)for file in * do
- •Подстановка результатов выполнения команд
- •Пример 3.
- •Вычисление выражений expr
- •При этом могут быть использованы
- •Примеры:
- •2. Сравнение цепочки символов
- •Примеры несовпадения цепочек:
- •Такое сопоставление можно выполнить и с использованием переменных
- •Другой возможностью команды expr является ее способность выделить только часть цепочки символов с
- •Условная замена переменных При условной замене значение одной
- •При отсутствии аргумента справа от знака ?
- •Примеры.
- •Усложненное присваивание переменным
- •Пример 3.
- •Пример 4. Значение, присваемое переменной, может быть значением другой переменной.
- •Для приписывания дополнительных
- •Позиционные параметры
- •shell использует 10 позиционных параметров и несколько специальных
- •Для этой цели применяется цикл и команда shift, чтобы перенести позиционные параметры влево,
- •Присваивание значений позиционным параметрам
- •Пример:
- •Дополнительные переменные командной строки.
- •Отладка shell-программ
- •Например, для отладки shell-процедуры filez надо ввести:
Пример.
list = 'world_1 world_2 world_3 world_4' for VAL in $list
do echo $VAL done echo 'End of list'
На экран будет выведено:
world_1 |
|
world_2 |
|
world_3 |
|
world_4 |
|
End of list |
61 |
|
Б) for без in
Структура for может применяться и без ключевого слова in.
for name
do do_list done
В этом случае do_list выполняется один раз для каждого позиционного параметра (аргумента) интерпретатора shell. Команда for name эквивалентна команде
for name in $*. |
62 |
Например, необходимо инвертировать порядок списка аргументов.
Для этого необходимо выполнить: list = ''
for arg
do list = "$arg $list" done
echo $list
Если интерпретатор shell запускался с параметрами 1 2 3 4 5, то будет выдано
5 4 3 2 1.
63
Кроме аргументов командной строки и позиционных параметров, могут обрабатываться файлы, используя знаки подстановки:
for file in *
do echo “found $file”
done
В этом примере выводится список файлов, находящихся в данном каталоге, по одному названию файла в строке.
for file in [ab]* …. |
|
for file in a?? …. |
64 |
Пустая строка
: - это команда обозначает отсутствие операции. Её нельзя использовать в качестве комментария.
# - оператор комментария (игнорирует выполнение);
:- ничего не делает. if [ ! $1]
then : # Нет ничего fi
65
Данный пример показывает, что shell будет обрабатывать это, так как двоеточие
– это команда. Если просто подставить #, то процессор сообщит, что нет выполняемой команды.
66

Прерывание цикла break
Оператор break прерывает очередное выполнение включающего самого внутреннего его цикла. Например,
while true
do echo $Loop3 until false
do echo $Loop2 while true
3 2 1 do echo $Loop1 break $level
done
done
done |
67 |
|
Если переменная level отсутствует или равна 1, то прерывается цикл 1.
Если level=2, то прерывается цикл 2, и если level=3, то прерывается цикл 3.
Прерывание итерации цикла continue
Эта команда приводит к прерыванию
выполнения итерации ближайшего цикла, в котором находится сама команда continue.
68

while true
do echo $Loop3 until false
do echo $Loop2 while true
do echo $Loop1 continue $level
done done
done
69
Если переменная level имеет значение 2, то выполнение будет продолжено с оператора цикла until.
Если же значение будет равно 3, то будет возобновлен внешний цикл while.
Если же переменная level не установлена или равна 1, то будет продолжаться выполнение самого внутреннего цикла.
70