- •Программирование на языке 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-переменной присвоить
последовательность слов, разделенных пробелами.
Например, в случае
ps_10 = Student Titov Vladimir
переменной будет присвоено только слово
Student и выдано аварийное сообщение, что команд и программ с именами Titov и
Vladimir не найдены. |
31 |
Поэтому надо сделать: ps_10='Student Titov Vladimir'
или
="Student Titov Vladimir"
или
=Student\ Titov\ Vladimir
Эти все три способа равноценны.
32
Команда set
Команда set (установить) предназначена для вывода списка созданных переменных.
Чаще всего в нем выводится, кроме Вами созданных переменных, еще и следующие:
- TERM = vt100- тип терминала;
-PS1 = '$'- первичная подсказка, которую выводит интерпретатор shell, когда он готов принимать команду;
-PS2 = '>'- вторичная подсказка, которую выводит копия shell (то есть, вторично запущенный интерпретатор shell);
33
-PATH = /bin::/usr/bin
-HOME = - имя Вашего начального каталога;
-IFS = - внутренние разделители полей, которыми обычно служат:
-пробел;
-табуляция;
-символы новой строки.
34
Команда set имеет несколько опций, но Мы рассмотрим только одну:
-v - все входные строки, читаемые shell, выводятся на экран.
+v - подавление вывода на экран входных строк.
35
Доступ к отдельным аргументам
Когда команда set применяется одновременно с подстановкой результата выполнения команды, каждый из
элементов вывода при подстановке команды присваивается отдельному позиционному параметру.
Для задания подстановки результата выполнения команды в следующем примере команда date заключена в знаки апострофа
` (самая левая клавиша в цифровом ряде): set `date`
36
Выход команды date становится последовательностью аргументов для команды set и поэтому на экране ничего не появится.
Если вызвать саму команду date, то на экране можно будет увидеть:
date
Sun May 28 13:49:53 2011
37
После выполнения команды set `date` её результат будет присвоен последовательности параметров
$1, $2, $3, $4, $5
Теперь можно выводить на экран в любом удобном виде.
Например:
echo 'DATE: $3 $2 $1 $5 TIME: $4' На экран будет выведено:
DATE: 29 May Sun 2011 TIME: 13:49:53
38
Доступ к другим позиционным параметрам с номерами, больше девяти,
происходит по команде shift (сдвиг), которая сдвигает аргументы на одну позицию влево:
($1 <= $2, $2 <= $3 и т.д.),
но имя команды в позиции $0 остается без изменения.
Интерпретатор shell воспринимает
символ звездочки * как метасимвол для генерации номера любого позиционного параметра.
39
Путем ввода следующей команды можно получить доступ ко всем позиционным параметрам вызова:
shift echo $*
arg2, arg3, ....., arg11, arg12
то есть, здесь выводятся все - вплоть до
последнего имеющегося параметра, тогда как команда:
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 выведет только
$2 |
$3 |
$4 |
$5 |
$6 |
$7 |
$8 |
$9 |
$10 |
40 |