Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Лабораторная работа № 3. Командные сценарии
1. Цель работы Целью работы является изучение расширенных возможностей командного языка Shell. 2. Методические указания 2.1 Общие сведения Командный сценарий (скрипт, командный файл) – это исполняемый текстовый файл, состоящий из команд интерпретатора. Сценарий часто называют shell–программой и используют для администрирования и управления ОС. Язык командного интерпретатора семейства UNIX, в отличие от интерпретатора Windows, является языком высокого уровня, поддерживающим ввод-вывод переменных, ветвления (if-then-else, case), циклы (for, while, until), работу с функциями, пошаговый режим отладки и т.д. Запуск сценария может проводиться несколькими способами: · запустить интерпретатор, указав ему в качестве аргумента имя файла сценария, например: sh myscript.sh · выполнить сценарий в текущем экземпляре shell, например: . myscript.sh или source myscript.sh · установить для сценария файловый атрибут «исполняемый» и запустить как обычную программу: chmod 755 myscript.sh; myscript.sh При написании сценария необходимо соблюдать следующие требования: · в первой строке обычно указывается имя интерпретатора, который будет исполнять сценарий, например #! bin/bash · в конце сценария обязательно вводится символ перевода строки (нажатие ENTER). 2.2 Переменные сценария Каждый запущенный экземпляр командного интерпретатора shell имеет определенный набор стандартных глобальных переменных, значения которых можно просмотреть командами env или printenv. В таблице 8 приведены назначения некоторых переменных. Таблица 8
Пользователь может использовать в сценариях глобальные переменные интерпретатора и собственные локальные переменные. Имена переменных представляют собой последовательность букв, цифр и символов подчеркивания, имя должно начинаться с буквы или символа подчеркивания. Переменные всегда имеют строковый тип и задаются сразу со значением (возможно с пустым). При объявлении переменной ее имя и значение должны быть записаны без пробелов относительно символа равенства. Например, создадим две переменных, присвоив переменной VAR_1 значение “245”, а переменной VAR_2 пустое значение: VAR_1=245 VAR_2= Если для переменной задается значение, содержащее пробелы, то нужно заключать его в кавычки: VAR_3=”program files” В качестве значения переменной можно присвоить результат выполнения команды Linux, указав имя команды в обратных кавычках (обычно этот символ находится на клавише для ввода символов «~» и «ё»): VAR_2=`pwd` Значение переменным можно задать в диалоговом режиме, например команда read A B C присваивает значения переменным A, B и C. Вывод значений переменных на экран проводится командой echo с указанием символа “$” перед именем переменной: echo $VAR_3 При необходимости выполнения конкатенации значения переменной и произвольной символьной строки используются фигурные скобки: echo ${VAR_3}binary Командный интерпретатор имеет возможность обработки переменных как целых чисел, выполняя операции сложения (+), вычитания (-), умножения (*), целочисленного деления (/) и получения остатка от деления (%): A=`expr $x + $y`; B=`expr $x - $y` C=`expr $x / $y`; D=`expr $x % $y`; E=`expr $x “*” $y` Замечание: символ умножения должен быть взят в кавычки, т.к. это служебный символ интерпретатора, а имена переменных и знаки операций всегда разделяются пробелами. Удаление переменных выполняется командой unset, например unset VAR_3. Все локальные переменные доступны только в том процессе shell, в котором они были объявлены. Для того, чтобы переменная стала глобальной и к ней можно было обращаться из дочерних процессов, ее следует экспортировать командой export. Возможны два способа экспорта: · при создании переменной (например, export VAR_4=myfolder); · после создания переменной (например, export VAR_4 ) Команда export без аргументов выводит список всех экспортированных переменных интерпретатора. Для выполнения командного сценария Linux создает отдельный экземпляр командного интерпретатора, поэтому переменные ‘*’, ‘#’ и ‘@’ имеют собственные значения для каждого запущенного сценария. Все переменные, известные сценарию во время выполнения, образуют его окружение, включающее переменные, которые сценарий получает путем наследования от родительского процесса (от интерпретатора shell) и собственные локальные переменные. 2.3 Параметры сценария Сценарий может принимать аргументы, используя механизм формальных и фактических параметров. Для описания формальных параметров в программе используются специальные переменные, имена которых состоят из одной цифры в диапазоне от 0 до 9, перед которой стоит символ ‘$’. При запуске сценария в командной строке указываются значения фактических параметров, которые подставляются на место соответствующих формальных параметров. Формальный параметр $0 содержит имя сценария, параметр $1 – значение первого фактического параметра, параметр $2 – второго фактического параметра и т.д. Общее число параметров содержится в переменной #. Если число фактических параметров превышает число формальных параметров, то в сценарии можно использовать команду shift n, которая сдвигает список формальных параметров относительно списка фактических параметров на n позиций (по умолчанию n=1). Обратите внимание: значение параметра $0 не изменяется при использовании команды shift! При загрузке системы командный интерпретатор Shell выполняет команды, содержащиеся в файле /etc/profile, затем команды, содержащиеся в файле $HOME /.profile. Для того, чтобы при входе в систему автоматически устанавливались необходимые переменные, следует откорректировать файл.profile, находящийся в Вашем домашнем каталоге. 2.4 Операторы языка Shell 2.4.1 Оператор TEST Оператор test проверяет выполнение заданного условия и возвращает логическое значение «истина» (0) или «ложь» (1). Общий формат оператора: test условие или [ условие ] Замечание: вторая форма записи оператора предусматривает наличие обязательных пробелов между квадратными скобками и выражением условия. Если строка условия в команде test пустая, то возвращается значение 1. Возможны условия нескольких видов: а) проверка файлов или переменных формат команды: test ключ имя_файла | имя_переменной ключ команды задает режим проверки и может принимать следующие значения -f - указанный файл является обычным файлом; -d - указанный файл является обычным каталогом; -с - указанный файл является символьным устройством; -r - указанный файл доступен для чтения; -w - указанный файл доступен для записи; -s - указанный файл не является пустым; -n - указанная переменная имеет значение (не пустая); -z - указанная переменная не имеет значения. Примеры команды: test –f /usr/user1/file_1 возвращает 0, если файл /usr/user1/file_1 является обычным файлом; test –w /usr/user1/file_1 возвращает 0, если файл /usr/user1/file_1 доступен для записи; test –n $ALFA возвращает 0, если переменная ALFA имеет значение. 2) сравнение строк формат команды: test строка1 отношение строка2 операции отношения строк: = (равно) или! = (не равно). Примеры команд: test $A = $B возвращает 0, если значение переменной A равно значению переменной B; test $A! = $B возвращает 0, если значение переменной A не равно значению переменной B. Замечание: операция отношения обязательно с двух сторон окружается пробелами. 3) сравнение целых чисел. формат команды: test число1 отношение число2 операции отношения чисел: -eq - равно; -ne - не равно; -gt - больше; -ge - больше или равно; -lt - меньше; -le - меньше или равно. 2.4.2 Оператор IF Условный оператор IF имеет следующий формат: if условие then список_операторов [elif условие then список_операторов ] [else список_операторов] fi Здесь условие – любой оператор, возвращающий значение true или false (обычно используется оператор test); список_операторов - операторы, разделенные точкой с запятой (; ). Пример оператора: if [ -f /tmp/myfile ] then cksum /tmp/myfile else ls /tmp > /tmp/myfile; cksum /tmp/myfile fi 2.4.3 Оператор CASE Оператор множественного выбора CASE имеет следующий формат: Case строка in шаблон_1) список_операторов;; шаблон_2) список_операторов;; шаблон_n) список_операторов;; esac Пример оператора: echo –n ‘please enter symbol from A to C: ‘ read ENTRY case $ENTRY in A|a) echo ‘Apple’;; B|b) echo ‘Baby’;; C|c) echo ‘Coke’;; *) echo ‘Please type A, B or C! ’;; esac 2.4.4 Оператор FOR Оператор предопределенного цикла FOR имеет следующий формат: for имя [in список] do список_операторов done Если список значений для переменной не задан, то в качестве списка используется значение внутренней переменной @, содержащей список аргументов сценария (см. табл. 7). Пример оператора: list=”word 1 word2 word3 word4” for VAL in $LIST do echo $VAL done 2.4.5 Операторы WHILE и UNTIL Операторы WHILE и UNTIL предназначены для создания циклов с неопределенным числом исполнения списка операторов. Список_операторов оператора WHILE исполняется только тогда, когда условие истинно, а для оператора UNTIL – когда условие ложно. Выход из циклов проводится путем контроля значения условия или принудительно по команде break. Форматы операторов:
2.4.6 Использование функций в сценариях Функции Shell описываются следующим образом: имя_функции () ( список_операторов ) Функции поддерживают механизм формальных и фактических параметров. Формальные параметры являются локальными и имеют имена от 0 до 9. Если функция должна вернуть код завершения, то используется оператор return 2.5 Создание сценария Файл сценария можно создать несколькими способами. Первый способ основан на команде echo и может использоваться для создания только очень простых сценариев. Если файл должен содержать несколько строк, то в команде echo необходимос помощью ключа -e разрешить обработку специальных символов и для перевода строки применять символы ‘\n’, например: echo -e " ls -l \nman echo" > echo_primer.sh Здесь в файл echo_primer.sh будут записаны две строки: ls –l man echo Второй способ использует команду cat: cat > cat_primer.sh < команды > нажатие ENTER Ctrl+D Третий способ основан на применении текстового редактора vi. Редактор запускается следующим образом: vi имя_файла. Если файл с именем имя_файла не существует, то он будет создан. 3. Порядок выполнения работы 1. Посмотреть справку по команде echo, ознакомиться с ее ключами. 2. Освоить способы создания сценария, описанные в разделе 2.5 3. Разработать сценарий для создания файла данных с информацией согласно таблицы 9. Количество записей в файле – не менее 10, в скобках указано смещение поля относительно начала записи. Данные в сценарий передавать через параметры, форматирование полей записи проводить путем циклического добавления необходимого числа пробелов, например: len_fam=` expr length $fam`; [ $len_fam –lt 20 ] do #записываем пробел без перевода строки echo –n “ “ > > $file_dat; len_fam=`expr $len_fam + 1`; done Здесь len_fam – переменная, в которой храниться текущая длина введенного пользователем значения поля. 4. Разработать сценарий для поиска в файле данных заданной пользователем строки символов. Таблица 9
5. Разработать сценарий для сортировки файла данных по заданному пользователем полю записи. 6. Разработать сценарий, формирующий меню для опроса пользователя (пункты меню – добавление данных, поиск данных, сортировка данных, выход) и выполнение этого меню с помощью вызова соответствующих сценариев, разработанных в п. 3–5 задания. В сценарий необходимо передать в виде параметров номер Вашей группы и номер бригады; при работе сценарий должен в первой строке выводить текущую дату и значения принятых параметров, а затем – строки меню. 4. Контрольные вопросы 1. Командный сценарий: определение, назначение. 2. Способы запуска командного сценария. 3. Способы передачи данных в командный сценарий. 4. Переменные в командном сценарии: типы, область видимости, допустимые операции. 5. Какие виды циклов могут использоваться в сценарии. 6. Какие виды ветвлений могут использоваться в сценарии. 7. Поясните алгоритм форматирования записей при выполнении п. 3.3 лабораторной работы. Популярное:
|
Последнее изменение этой страницы: 2017-03-08; Просмотров: 1159; Нарушение авторского права страницы