- •Программирование на языке 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 надо ввести:
Для приписывания дополнительных
символов к концу имени необходимо ставить фигурные скобки.
B = мета
echo ${B}символ2
На экран будет выведено:
метасимвол2
иначе будет выведено сообщение, что переменная $Bсимвол2 отсутствует.
101
Позиционные параметры
Для идентификации позиций элементов в командной строке shell устанавливает позиционные параметры.
Чтобы интерпретатор мог их различать друг от друга, они должны разделяться пробелами.
При этом интерпретатор нумерует их, начиная с нуля.
Первый элемент (имя команды) всегда обозначается $0, первый аргумент - $1, второй - $2 и так далее до $9.
102
shell использует 10 позиционных параметров и несколько специальных
переменных для работы с аргументами, которые вводятся либо через командную строку либо устанавливаются пользователем.
Пример. grep cat enter $0 $1 $2
shell не может одновременно обрабатывать более 10 параметров (то есть за один раз).
103
Для этой цели применяется цикл и команда shift, чтобы перенести позиционные параметры влево, но имя
команды остается без изменения в позиции $0.
shift
После этого: $2 => $1 $3 => $2
$4 => $3 и так далее.
104
Присваивание значений позиционным параметрам
Для этого применяется команда set.
Она присваивает позиционному параметру значения цепочки символов аргументов.
set arg1 arg2 arg3
105
По этой команде интерпретатор shell присваивает первому позиционному параметру $1 значение arg1, второму - arg2 и т.д.
Значения этих аргументов можно проверить, выведя их значения на экран:
echo $1 $2 $3
Будет выведено arg1 arg2 arg3
106
Пример: |
|
|
set `date` |
|
|
Выход команды date становится |
|
|
последовательностью аргументов для |
|
|
команды set и на экране ничего не |
|
|
отобразится. |
|
|
Будет сформировано: |
|
|
$1 - день недели; |
|
|
$2 |
- название месяца; |
|
$3 |
- день месяца; |
|
$4 |
- дата; |
|
$5 |
- год. |
107 |
|
|
Дополнительные переменные командной строки.
$# - число аргументов в командной строке;
$* - все аргументы до последнего, то есть и $11, $12 и так далее;
$@- все аргументы в командной строке после того, как кавычки поставлены около каждого из них.
shift |
|
|
echo $1 |
$2 … $9 |
|
arg2 arg3 ….arg10 |
108 |
echo $*
arg2 arg3 …. arg12
109
Отладка shell-программ
Для установки контроля над shell-
программой при вызове команды sh надо добавить одну из двух следующих опций:
-x - опция трассировки.
Эта опция необходима для просмотра команд и аргументов по мере их выполнения.
-v - опция входного контроля. Производит отображение входных строк по мере их считывания.
110