Лабораторная работа 5 Сценарии в операционной системе Linux
Любая из стандартных оболочек операционных систем семейства UNIX/Linux позволяет создавать командные файлы (еще называемые, сценариями, от англ. script). Следует иметь в виду, что они выполняются так, как будто команды, записанные в нем, последовательно вводятся с клавиатуры. Этот режим называется интерпретация. При котором трудно ожидать эффективной работы. Но программы, написанные на таком языке, учитывая разнообразие поддерживаемых ими средств, могут быть довольно сложными.
Сценарии используют для автоматического выполнения некоторого набора команд. Это удобно, если такие команды выполняется постоянно. Такая ситуация может быть связана с разными системными событиями, например:
– загрузка операционной системы;
– регистрация в системе очередного пользователя;
– запуск программного комплекса, обеспечивающего системные функции (иногда говорят «службы»).
Для понимания системных сценариев надо знать правила их записи. Поэтому первым этапом знакомства со сценариями будет изучение их синтаксиса. В файле сценария могут быть комментарии. Они начинается символом «#» и заканчивается в конце строки. Сценарий представляет собой текстовый файл. В первой его строке обычно записывается имя интерпретатора (например, #!/bin/bash) или пустой оператор :.
Как уже отмечалось, если мы хотим запустить на выполнение сценарий, он должен обладать правом на выполнение (параметр х), которое для владельца файла добавляются командой
chmod u+x <имя файла>
Но запустить текстовый файл с командами не имеющий прав на выполнение можно использую символ «.» (точка)-см. лабораторная работа 2, пункт 2.3 .
Командные оболочки (командные интерпретаторы) семейства UNIX/Linux имеют развитый язык программирования в большой степени ориентированный на автоматизацию задач администрирования ОС. В файле сценария кроме команд (имени исполнимого файла с параметрами) могут содержаться операторы. В последних, естественно, используют переменные.
В рамках этой лабораторной работы будет затронуты не все возможности языковых средств сценариев оболочек UNIX/Linux (не будут затронуты вопросы создание функции и использование массивов).
Начнем описание языка сценария оболочки UNIX с переменных. Можно выделить несколько их типов. Один из них был рассмотрен ранее. Это переменные окружения. Примерами их являются HOME и TERM.
Второй тип переменных создается разработчиком сценария. Их часто называют пользовательские (или переменные, определяемые пользователем). Задать их значения можно непосредственным присваиванием или командой read. Помимо такого типа переменных, а также рассмотренных ранее переменных окружения, язык программирования сценариев имеет собственные, встроенные переменные и предопределенные или специальные преременные.
Приведем два способа присваивания значений пользовательским переменным:
1. Непосредственное присваивание для переменных символьного типа.
переменное=значение
2. Непосредственное присваивание для переменных числовых значений.
let переменное=значение
Такие операторы являются одновременно и объявлением переменных. В данном случае значением может быть и выражения. Если значение переменной надо использовать в выражении, то перед ее именем ставиться символ «$». Далее будет приведено несколько примеров присваивания значений переменным, в которых для вывода значений используем оператор echo.
Перейдем к описанию встроенных переменных. Их имя, как правило, состоит из двух символов. Первым из них является «$». К примеру, в такой переменной $0 содержится имя файла сценария. Если в сценарии с именем scr1 записаны строки, среди которых есть такая
echo “Выполняется“ $0
то результат ее выполнения будет таким
Выполняется scr1
Такие специальные переменные $1, $2,... содержат параметры вызова сценария. Если таких параметров больше 9, то используем <Shift>. Приведем пример. Если сценарий с именем scr1 вызывался такой строкой
scr1 1 two
то такие операторы
echo $1 $2
приведут к следующему результату
1 two
а после такого
shift
echo $1
будет выведено только
two
Другими встроенными переменными сценариев являются такие:
$# - число параметров сценария.
$? - код возврата последнего процесса.
$* и $@ - значения всех параметров переданных сценарию.
Приведем пример использования встроенных переменных оболочки. В нем и далее последние две строки играют такую роль. Первая, после вывода результатов работы скрипта, выводит сообщение press key. Система останавливается и продолжит работу только после нажатия клавиши <Enter>.
Текст сценария scr2 |
РЕЗУЛЬТАТ и пояснения |
#!/bin/bash
clear
echo echo kol_vo param $# echo echo "all param => $*" echo "all param 2 => $@" echo "param_ry: one $1 | two $2 | three $3" echo press key read q |
Если сценарий вызвать следующим образом, scr2 1 two 3-th то получим следующие результаты.
3
1 two 3-th 1 two 3-th 1 | two | 3-th
press key
|
Теперь перейдем к описанию операторов, используемых в сценариях. Выше мы уже упоминали оператор echo, а также то, что для вывода на экран значений переменных используется «$». Для ввода значений переменной а используется оператор read. В приведенном примере показано присвоение символьных и численных значений переменным.
Текст сценария scr3 |
РЕЗУЛЬТАТЫ и пояснения |
#!/bin/bash
clear read a b=$a+1 let c=$a+1 let d=$b+1 echo $a $b echo “ c “ $c “ d “ d echo press key read q |
Если сценарий вызвать следующим образом, scr3 то получим следующие результаты. Вводите 3
3 3+1 с 4 d 5 press key |
В сценариях можно использовать управляющие конструкции. Одна из них предполагает использование оператора if. Формат его записи может быть разным, например, таким