
- •Программирование на языке 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 надо ввести:
Фоновое выполнение цикла
Если после done подставить &, то цикл будет выполняться в фоновом режиме.
for var in 1 2 3 4 5 do echo “$var”
done &
это может быть применено и для циклов while и until.
71
Выход из программы exit
Эта команда прекращает не просто текущий цикл, а всей процедуры.
После выполнения команды exit в вызывающую программу передается код возврата, равный нулю (true).
Если команда имеет аргумент, например, exit $status, то возвращается код возврата,
равный значению переменной status.
72
Переназначение ввода/вывода и циклы
Переназначение ввода
a)for var in * do
команды done < источник
Все команды в цикле получают данные через стандартный ввод. Можно получить из перенаправленного источника (любая команда считывает данные из указанного
источника). |
73 |
b) for var in * do
команды < источники done
Здесь каждая команда может брать
входные данные с разных мест.
Переназначение вывода Аналогично можно переназначить вывод:
a) for var in 1 2 3 4 5 do
echo “$var”
done |
74 |
|
Здесь все выходные данные всех команд в цикле направляются в единый файл (стандартный вывод).
b)for var in 1 2 3 4 5 do
echo “Processing $var” > /dev/tty команды
done > output
Здесь по команде echo данные направлены на tty, а по всем другим командам - в единый файл (стандартный
вывод). |
75 |
Можно связать циклы и конвейеры:
a)ls | for file in * do
echo $file file $file
done
Это пример перекачки данных в цикл
из конвейера. Команда file определяет тип файла.
76
b)for file in * do
echo $file done | wc –l
Здесь передача информации в конвейер в конце цикла. Происходит печать имен файлов и посылка по конвейеру команде wc –l для подсчета количества файлов.
77
Подстановка результатов выполнения команд
shell дает возможность использования
стандартного вывода любой команды в shell-программе.
Если команда заключена в знаки ударения (апострофы), то shell выполняет
эту команду и подставляет вместо нее полученный результат.
78
Пример 1. now = 'date'
В результате действия переменной now будет присвоена текущая дата:
now = Wed Feb 12 11:49:23 1997 Теперь по команде
echo $now
на экран будет выведена дата, хранящаяся в now.
79
Пример 2. f_names = 'ls'
В этом случае переменной f_names будут
присвоены результаты выполнения команды ls.
Если в текущем каталоге было 4 файла с именами file_1, file_2, file_3, file_4, то при использовании команды для вывода
echo $f_names |
|
на экране появится: |
|
file_1 file_2 file_3 file_4 |
80 |