Будь умным!


У вас вопросы?
У нас ответы:) SamZan.ru

Лабораторная работа 3 ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ КОМАНДНОГО ИНТЕРПРЕТАТОРА Ц

Работа добавлена на сайт samzan.ru: 2016-03-05

             Лабораторная работа  3

    ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ КОМАНДНОГО ИНТЕРПРЕТАТОРА

              Цель лабораторной работы.

Целью данной лабораторной работы является ознакомление с основными возможностями, предоставляемыми языком программирования командных последовательностей shell - скриптов. Основная практическая цель - выполнение индивидуальных заданий в рамках сеанса работы с ОС UNIX, смысл которых состоит в исполнении процессов пользователя в фоновом режиме, в перенастроенной среде, в осуществлении принудительного завершения процессов пользователя, а также в создании .profile-файла и файлов сценариев - скриптов.

           Командный интерпретатор shell.

Командный интерпретатор shell не входит в ядро операционной системы UNIX, что позволяет пользователю во-первых, выбирать такой командный интерпретатор, который в наибольшей степени удовлетворял бы его запросам, а, во-вторых, создавать свои собственные программы на языке shell. С точки зрения операционной системы командный интерпретатор shell обеспечивает удобный интерфейс между пользователем и ядром с помощью выполнения вводимых с терминала команд. Кроме того, современная версия shell (или, точнее, Bourne Again SHell) - это еще и полноценный язык программирования с возможностью введения переменных, алгоритмических структур и подпрограмм (содержащих командные файлы в том числе), средствами передачи параметров и обработки прерываний. Далее будет использоваться название shell, подразумевая любой, предпочитаемый Вами интерпретатор.

Программы (или скрипты), написанные на языке shell, представляют из себя последовательность командных строк, предназначенных для обработки интерпретатором языка shell. Сам интерпретатор обычно расположен в директории /bin под именем sh.

Командная строка в языке shell - это последовательность слов, разделенная пробелами, причем всегда первое слово определяет имя команды, утилиты, функции или скрипта, которые будут выполнены, а оставшиеся слова, как правило, передаются в качестве аргументов. Файл, содержащий программу, определяемую первым словом строки, может храниться как в системном каталоге, так и в личных каталогах пользователей, т.е. быть продуктом деятельности последних. В этом смысле, набор команд языка shell является расширяемым - его пополняет каждая программа, написанная пользователем, и даже ссылка на уже существующий файл. Для процедур shell остаются таким образом в силе понятия    "стандартный ввод", "стандартный вывод", "стандартный протокол" и "конвейер". Кроме того, мощь языку shell придает возможность использования переменных и аргументов. Переменные в языке shell обозначаются идентификаторами, а определяются строками типа:

var=value;

export var;

где var   -   соответствующий   текстовому значению value идентификатор.

Доступ к переменной (к ее значению) осуществляется по выполнению по отношению  к  идентификатору  префиксной  операции  $.

Строка, являющаяся значением (value) некоторой переменной языка shell, не должна содержать символы переопределения ввода/вывода, фонового процесса и канала. Предопределенные (служебные) переменные shell состоят из двух подмножеств: аргументов скриптов и системных (внутренних) переменных интерпретатора, некоторые из которых можно только читать, а другие - еще и модифицировать. К системным shell- переменным относятся такие, например, как:

HOME - содержит имя "домашнего" каталога пользователя;

PATH - множество каталогов, в которых будет проходить поиск файла команды (в качестве разделителя используется символ двоеточия;

PS1 /  PS2 - первичный / вторичный "промптеры";

TERM - содержит  имя  типа  терминала пользователя;

MAIL - содержит полное имя почтового ящика пользователя.

Аргументы - это особый тип переменных, именами которых служат цифры. Аргументы - это по сути своей позиционные параметры командной строки, причем имя команды - это нулевой аргумент. Значения аргументов обозначают как $d, где d - любая десятичная цифра. Поскольку в некоторых случаях десяти переменных может оказаться недостаточно, то в языке shell введена команда shift, сдвигающая аргументы на одну позицию влево за исключением $0, который остается без изменений.

Значения некоторых специальных аргументов устанавливаются самим shell'ом при вызове скрипта:

# - количество фактических аргументов - позиционных параметров,

кроме $0,

? - код возврата,

$ - значение PID  текущего процесса,

! - значение PID фонового процесса, вызванного последним когдалибо,

- - состояние флагов интерпретатора shell,

* - совокупность всех позиционных параметров, начиная с $1.

Для выполнения элементарных арифметических действий используется команда expr, помещающая результат в стандартный вывод.

Знаки операций команды expr:

+ - для сложения,

- - для вычитания,

'*' или "*" - для умножения,

/ - для деления,

% - для взятия остатка от деления.

Помимо этого язык shell, как всякий универсальный язык программирования, предоставляет ряд конструкций для управления последовательностью действий:

- оператор цикла for;

- условный оператор if;

- команда test для вычисления условных выражений;

- оператор цикла while;

- оператор цикла until;

- оператор выбора case;

- операторы выдачи сообщений echo и ewal.

Наиболее часто используются операторы цикла и условный оператор, при этом формат оператора цикла for можно представить в виде:

for <имя> [in <слово>...]

do

<командная последовательность>

done

где переменная <имя> последовательно принимает значения из набора <слово>, или, в случае отсутствия конструкции in <слово>, соответствует значениям аргументов вызова скрипта; do... done - тело цикла; <командная последовательность> - любая последовательность команд shell'a.

Построение циклов возможно и с помощью следующих структур: while <условие>

do

<командная последовательность>

done

где <условие> - некоторая, команда или   выражение,

характеризующаяся кодом возврата, при нулевом значении этого кода будет выполняться тело цикла.

until <условие>

do

<командная последовательность>

done

В этой операторе тело цикла исполняется при ненулевом значениях кода возврата <условие>.

Условный оператор имеет несколько видов, при этом одним из наиболее употребительных является следующий:

if <условие>

then

<командная последовательность 1>

[else

<командная последовательность 2>]

fi

где <командная последовательность 1> выполняется в случае выработки в <условие> кода возврата, равного нулю, после чего выполняется, если она есть, команда, непосредственно следующая за ограничителем fi; <командная последовательность 2> выполняется сразу после выработки в <условие> ненулевого кода возврата.

Язык командного интерпретатора shell дает большие возможности пользователю по созданию гибкого программного окружения. Другими распространенными версиями shell являются т.н. C-shell (автор - У.Джой) и Korn-shell (автор - Д. Корн), каждый из которых при идейной близости к bourne-shell обладает отличительными особенностями только в плане улучшения сервисных служб (введение буфера диалогового режима, массива переменных и т.д.), в связи с чем изучение языков командного интерпретатора в ОС UNIX происходит, как правило, на примере Bourne-Again-SHhell'a (далее – просто shell).

              Задание к лабораторной работе

            Домашняя подготовка

1. Выберите для изучения вариант языка командного интерпретатора Bourne-Again-SHell.

2. Изучите по конспекту лекций и рекомендованной литературе следующие вопросы и темы: файлы инициализации; переменные и аргументы; операторы и процедуры; построение условных операторов, циклов; выполнение проверок, сдвигов, ветвления, вычислений; замены, подстановки и переназначения.

3. Просмотрите и подготовьте ответы на вопросы коллоквиума:

1) Как называется в shell файл начала сеанса?

2) Каким образом строится функция в shell?

3) Каков порядок поиска по каталогам ОС UNIX при использовании shell?

4) Как называются командные файлы в shell?

5) Каким образом устанавливается  в shell  первичный и вторичный "промптеры"?

6) Каким образом устанавливаются каталоги обязательного поиска команд в shell?

7)Каким образом устанавливается средствами shell тип и характеристики терминала пользователя?

8) Что такое экспортирование переменныхl?

9) Какие типы переменных и аргументов доступны в shell?

10) Какие возможности группирования команд Вам известны в shell, каким образом они определены для интерпретатора?

11) Что такое shell-файл?

12) Каким образом выполнить shell-файл?

13) Каким образом осуществляется вывод любого готового текста на экран пользователя?

14) Каким образом может быть осуществлена проверка файлов в shell?

15) Каким образом может быть произведено построение условных операторов в shell?

16) Каким образом получить в shell-программе аргумент вызова с номером i?

17) Каким образом получить в shell PID процессов и каких процессов?

18) Каким образом присваивается значение переменным в shell?

19) Каким образом отображается в shell значение переменной?

20) Можно ли присваивать переменным shell текстовые значения, содержащие разделители (например, пробелы)?

21) Каким образом происходит вычисление арифметических выражений в shell?

22) Каким образом в shell-программе доступно число аргументов вызова?

23) Каким образом может быть произведено построение операторов цикла в shell?

24) Возможно ли и каким образом построение  вложенных циклов в shell?

25) Возможно ли принудительное завершение цикла?

26) Возможно ли возобновление выполнения цикла?

27) Возможно ли принудительное завершение shell-программы?

28) Каким образом можно построить многовариантный выбор в Bourneshell?

29)Каким образом получить в shell-программе доступ к аргументам вызова, если число последних более 10?

4. Изучите вариант лабораторное задание, соответствующий вашей бригаде, продумайте его выполнение.

                             Лабораторное задание

1)  Перед выполнением лабораторного задания :

- ответьте на вопросы коллоквиума, заданные преподавателем;

- зарегистрируйтесь в системе.

2)  Создайте в Вашем домашнем каталоге подкаталог lab4, сделайте его рабочим.

3)  Сохраните в виде текстового файла F1.var списки значений системных переменных shell и идентификаторов активных процессов в системе.

4) Переопределите значения системных переменных PS1 и PS2, убедитесь в их влиянии на процесс диалога с пользователем, сохраните в файле F2.var новый список значений системных переменных.

5)  Вернитесь к исходному значению системных переменных shell.

6) С помощью соответствующей команды UNIX найдите в системных каталогах файл local.profile и скопируйте его в свой рабочий каталог под именем .profile, определите в последнем значения пользовательских переменных DIGIT_FOR_LAB, MYOWNNAME, TIMEZONE, MYGROUP, DAY_OF_WEEK_TODAY, а также измените значения системных переменных интерпретатора PATH и HOME, добавив или задав в них имя Вашего рабочего каталога lab4. Стартуйте новый интерпретатор в модифицированном таким образом системном окружении, убедитесь в результате.

7) Напишите скрипт на языке shell, который по вводимой в качестве аргументов вызова произвольной последовательности целых десятичных чисел осуществлял бы вычисление промежуточных сумм и выводил бы конечный результат на экран и в файл sh.result. Используйте в программе значение переменной интерпретатора $#. Если номер Вашей бригады четный, то постарайтесь обойтись оператором for, если нечетный - конструкцией if. Создайте модификацию данного скрипта, осуществляющую ввод исходной последовательности чисел в диалоге  с клавиатуры терминала.

8) Напишите скрипт, который через каждые две минуты выводил бы на экран требуемое сообщение. Скрипт должен начинать работу только после наступления заданного момента времени, поэтому его следует запускать в фоновом режиме. Для уточнения и индивидуализации задания используйте следующую таблицу:

Номер

Бригада

Уточнение задания к п.8)

1

Запуск скрипта выполните в последовательности с командой date, строка сообщения должна включать в себя количество секунд, прошедших с начала запуска скрипта.

2

Сообщение должно представлять собой следующий текст:

- строка заголовка,

- порядковый номер текущего сообщения,

- номер PID скрипта и его PPID,

  1.  время,
  2.  имя и PID процесса из числа активных в этот момент.

3

Аргумент при запуске скрипта – значения для переустановки PS1.

4

После каждого вывода сообщения на экран, значение переменной MYOWNNAME должно удлиняться на один символ из последовательности: A,B,C,D,…

5

Время срабатывания скрипта “запомнить” в переменных DAY_OF_WEEK_TODAY и  TIMEZONE.

6

При выводе сообщения  скрипт должен создавать новую переменную с именем MESSAGEx (x=1,2,3…), в которую надо записывать номер сообщения и его текст.

7

Аргумент при запуске скрипта – значения для переустановки PS2.

8

Сообщение должно представлять собой следующий текст:

  1.  строка заголовка,
  2.  “ “значение переменной MYOWNNAME”,
  3.  ‘ ‘значение переменной DAY_OF_WEEK_TODAY’,
  4.  $$$значение переменнойMYGROUP$#.

9

Сообщение должно представлять собой следующий текст:

  1.  строка заголовка,
  2.  время,
  3.  имя и PID процесса из числа активных в этот момент,
  4.  порядковый номер текущего сообщения,
  5.  PID и PPID данного скрипта.

10

После каждого вывода сообщения на экран, значение переменной MYOWNNAME должно удлиняться на один символ из последовательности: 0,1,2,3,…9,0,1,2,3,…

9) Напишите скрипт, который проверял бы наличие процесса, связанного с выполнением скрипта предыдущего пункта, и останавливал бы его, если количество выведенных им на экран сообщений, превысит некоторый предел. Для уточнения задания см. таблицу ниже:

Номер

Бригады

Уточнение задания к п.9)

1 – 10

Необходимое число повторов - в переменной

DIGIT_FOR_LAB

2,4,6,8,10

Значение DIGIT_FOR_LAB установить в диалоговом режиме после старта скрипта п.9).

1,3,5,7,9

Значение DIGIT_FOR_LAB установить на N больше, чем количество повторов по скрипту п.8), установка N - в диалоговом режиме.

3,4,5,6,9

Значение DIGIT_FOR_LAB не может быть отрицательным, нулевым и больше 5.

1,2,7,8,10

Значение DIGIT_FOR_LAB может быть только одним из следующих: 2,3,5,7,10,100,120.

1 - 10

Первое сообщение после старта скрипта по п.9) - вывод значения текущего числа повторов сообщений, выведенных скриптом по п.8).

  

10) Напишите скрипт, который через несколько минут (5-10) закроет все процессы, связанные с п.п.8 и 9 задания. Если номер Вашей бригады нечетный - постарайтесь обойтись конструкцией if, если четный - конструкцией for. Примечание: перед запуском скрипта покажите его преподавателю и только после получения разрешения запустите на исполнение. Подсказка к выполнению: если "кое-о-чем" Вы позаботились перед выполнением п.8 задания, то это "кое-что" позволит Вам выполнить задание данного пункта.

11) Напишите скрипт, который осуществлял бы просмотр файлового поддерева, начиная с некоторого задаваемого каталога с файлами определенного типа производил бы некие действия. Если номер Вашей бригады четный, то "корень" поддерева должен задаваться в качестве аргумента вызова, если нечетный - то вводиться в диалоге с клавиатуры; бригады с первой по четвертую работают с текстовыми файлами, содержимое которых (с заголовком - именем файла) должно выводится на экран, остальные бригады работают с исполняемыми файлами, для которых на экран должно выводиться имя, после чего осуществляться запрос - следует ли его запустить на выполнение.

12) Вернитесь в shell, с которым Вы работали до п.6, и завершите сеанс работы с ОС Юникс в отложенном режиме – спустя, допустим 1-2 минуты.                                                        


1. Протиправна поведінка (Проблема правонарушений)
2. Миф Софокл Данте конспект Античность 20
3. Спортивный маркетинг
4. Внутренний государственный долг РФ проблемы эффективного управления
5. Не для того что узнать стоит или нет П
6. Інтереси СРСР та США на Близькому Сході в 80-ті роки ХХ ст
7. Древо познания добра и зл
8. Стандарт Добрый день меня зовут компания соедините меня с человеком который занимается вопрос
9. тема взаимоотношений развивающегося человека с окружающей средой все многообразие социальных связей разв
10. на тему- Рахунки і подвійний запис Факультет- Економіки та менеджменту Спеціальність-ldquo;Облік.html
11. Мышечные и нервная ткани
12. провайдера БД разработанная в с помощью СУБД Interbse 6
13. і. Його батьки були родом з села Смолянка Куликівського районуЧернігівської області
14. Сенсорное воспитание детей младшего дошкольного возраста с помощью дидактических игр
15. Малиновка. Сроки проведения ~ 10 14 января 2014 г
16. Культуры изолированных клеток и тканей как новый источник для получения лекарственного сырья
17. тематическое планирование уроков изобразительного искусства в 5 классе
18. консультационная фирма ldquo;АЛЬТrdquo; ldquo;Fortis imgintio genert csumrdquo; ldquo;Могучее воображение порождает событиеrdqu
19. Безопасность жизнедеятельности Программа и методические указания по технологической практике
20. Введение в психоанализ