Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Лабораторная работа № 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

Переменная Значение
? Код завершения последней команды (0 – нормальное завершение)
$ PID текущего процесса shell
! PID последнего фонового процесса
# Число параметров, переданных в shell
* Список параметров shell в виде одной строки
@ Список параметров shell в виде набора слов
- Флаги, передаваемые в shell
HOME Имя домашнего каталога
PATH Пути поиска исполняемых файлов
PS1 Вид системной подсказки
SHELL Имя каталога, в котором зарегистрирован командный интерпретатор
USER Имя учетной записи текущего пользователя

Пользователь может использовать в сценариях глобальные переменные интерпретатора и собственные локальные переменные. Имена переменных представляют собой последовательность букв, цифр и символов подчеркивания, имя должно начинаться с буквы или символа подчеркивания. Переменные всегда имеют строковый тип и задаются сразу со значением (возможно с пустым).

При объявлении переменной ее имя и значение должны быть записаны без пробелов относительно символа равенства. Например, создадим две переменных, присвоив переменной 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.

Форматы операторов:

while условие do список_операторов done until условие do список_операторов done

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

№ варианта Предметная область Название поля
Студенческая группа Фамилия (0), год рождения (20), место рождения (25), средний балл (40).
Расписание поездов Номер поезда (0), пункт назначения (5), время отправления (30), время в пути (40).
Туристическая фирма Номер тура (0), страна (5), город (20), продолжительность тура (40), дата отправления (45).
Расписание самолетов Номер рейса (0), пункт назначения (10), время отправления (30), время в пути (40)
Склад Код товара (0), группа товара (5), наименование товара (20), дата поступления (40), цена (45).
Отдел кадров Фамилия (0), год рождения (20), место рождения (25), должность (45), адрес, телефон (55)
Успеваемость студентов Группа (0), фамилия (10), номер семестра (30), название дисциплины (32), оценка (50).
Договорной отдел Шифр договора (0), заказчик (10), источник финансирования (30), сумма договора (50), дата начала (60), дата окончания (70)
Бухгалтерия Табельный номер (0), фамилия (7), оклад (30), надбавка (40), наличие налогового вычета (45),
ГИБДД Госномер автомобиля(0), модель (10), год выпуска (25), тип двигателя (30), адрес регистрации (40), дата регистрации (65)

 

 

5. Разработать сценарий для сортировки файла данных по заданному пользователем полю записи.

6. Разработать сценарий, формирующий меню для опроса пользователя (пункты меню – добавление данных, поиск данных, сортировка данных, выход) и выполнение этого меню с помощью вызова соответствующих сценариев, разработанных в п. 3–5 задания. В сценарий необходимо передать в виде параметров номер Вашей группы и номер бригады; при работе сценарий должен в первой строке выводить текущую дату и значения принятых параметров, а затем – строки меню.

4. Контрольные вопросы

1. Командный сценарий: определение, назначение.

2. Способы запуска командного сценария.

3. Способы передачи данных в командный сценарий.

4. Переменные в командном сценарии: типы, область видимости, допустимые операции.

5. Какие виды циклов могут использоваться в сценарии.

6. Какие виды ветвлений могут использоваться в сценарии.

7. Поясните алгоритм форматирования записей при выполнении п. 3.3 лабораторной работы.


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-08; Просмотров: 1118; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.066 с.)
Главная | Случайная страница | Обратная связь