
- •Программирование на языке 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 надо ввести:
Программирование на языке shell
Программа shell является одной из наиболее важных утилит OC UNIX.
shell - это не только интерпретатор
команд системы UNIX ( типа command.com в DOS), но еще и язык программирования
на уровне таких команд (то есть можно создавать файлы типа '.bat' как в DOS).
1
При рассмотрении команд в UNIX по сути использовался интерактивный режим взаимодействия с shell, в котором можно:
-ввести команду;
-сделать перадресацию (перенаправление);
-создать конвейер.
Но это только часть возможностей написания программ на языке shell, версий которых очень много:
2
-командный процессор Борна – sh (более старый);
-командный процессор С – csh (более новый, но много различий в этих двух языках);
-командный процессор Корна – ksh (полностью совместим С Борном и включает многие черты С).
3
Любая хранимая в файле команда или последовательность команд системы UNIX
называется shell-программой или командным файлом.
Обычно командным файлом называют
простую последовательность команд, а "shell-программой" - их более сложные
структуры: с ветвлением, с циклом и др.
Существуют три способа инициализации shell для выполнения командных файлов.
4
1. Этот метод основан на переадресации ввода не с терминала, а с файла. Пусть
файл lsdir содержит некоторые команды, тогда можно выполнить:
sh < lsdir
2. В первом случае есть недостаток -
нельзя передавать аргументы.
Поэтому существует возможность в shell читать команды с файла, хранимые на
диске. Это можно сделать просто: sh lsdir
5
Здесь уже можно передавать аргументы, если Вы их предусмотрели.
Например,
sh lsdir/bin/etc
3. Если в файле право доступа на выполнение не подавлено ( установить такой доступ можно командой chmod a+x lsdir ), то тогда выполнить действие по команде из файла lsdir можно просто, набрав
lsdir
Этот способ является наиболее предпочтительным и часто используется.
6
shell переменные
Переменные в системе shell должны начинаться с буквы, состоять из букв, цифр и знака подчеркивания. Имена переменных чувствительны к регистру. Они могут быть любой длины из заглавных, строчных букв, также содержать цифры и специальные символы. Но они не должны начинаться с цифры и не могут содержать спец символы командного интерпретатора (*, $, ?, [, ], <, >)
7
Присваивание значений переменным
Значение переменным можно присвоить по команде присваивания:
ux=u.UNIX
ux=INIX
Здесь первым оператором значение u.UNIX присваивается shell-переменной
"ux", а вторым - ее значение меняется на новое. Желательно команды писать
строчными буквами, а переменные – всегда прописными.
Примечание: Перед знаком = и после не должно быть пробелов.
8
Если необходимо присвоить переменной значение, содержащее пробелы, знаки табуляции и символы новой строки, то оно должно быть заключено в кавычки:
name="Titov Vladidmir Ivanovich"
Команда readonly (только читать) помечает переменную таким образом, что ее значение не может быть изменено:
readonly ux
Теперь, если выполнить для переменной ux команду
ux=uu.UNIX
9
то будет выдано сообщение об ошибке
"ux: is read only".
Поэтому, если в shell-программе значение переменной не должно меняться,
то имеет смысл применить команду readonly.
Если требуется получить список
переменных, которые нельзя изменить, то надо выполнить одну команду readonly без
параметров.
10