Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Stsenarii.doc
Скачиваний:
0
Добавлен:
22.12.2018
Размер:
125.95 Кб
Скачать

Сценарии оболочки

Взаимодействие пользователя с операционной системой осуществляется через оболочку. Оболочка (shell) – это программа, обрабатывающая команды, вводимые пользователем или содержащиеся в файле (при этом файл называется сценарием и является интерпретируемой программой). Аналогами оболочки в среде Windows являются командный процессор command.com или cmd.exe, а аналогами сценариев – командные файлы (bat-файлы). В Linux существует ряд различных оболочек (например, sh, ksh, csh, yacc), наиболее популярной из которых является bash.

Сразу после запуска оболочки производится её инициализация для установки ряда параметров. При этом оболочкой производится чтение двух файлов: /etc/profile и ~/.profile. В первом из них содержатся настройки параметров, общие для всех пользователей. Во втором файле каждый пользователь может разместить свои собственные настройки для работы с оболочкой.

Пользовательская оболочка может быть запущена на выполнение в двух режимах – интерактивном и не интерактивном. Когда оболочка выдаёт пользователю приглашение, она работает в интерактивном режиме. Это означает, что оболочка принимает ввод от пользователя и выполняет команды, которые пользователь укажет. Оболочка называется интерактивной, поскольку она взаимодействует с пользователем. Завершение работы с оболочкой в этом случае происходит по команде пользователя.

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

имя_оболочки имя_файла

Здесь имя_файла – имя файла, содержащего команды для выполнения. Такой файл называется сценарием оболочки. Он является текстовым файлом и может быть создан любым доступным текстовым редактором.

В качестве имени_оболочки может выступать, например, sh, bash или имя любой другой оболочки.

Запуск сценария

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

chmod +x имя_файла

Кроме этого, необходимо явно указать, какая оболочка должна использоваться для выполнения данного сценария. Это можно сделать, разместив в первой строке сценария последовательность символов #!путь_к_программе-оболочке. Например, если необходимо указать, что для выполнения сценария следует использовать оболочку bash, первой строкой сценария должна быть строка

#!/bin/bash

Сценарий может содержать комментарии. Комментарий – это оператор, который может размещаться в сценарии оболочки, но оболочкой не исполняется. Комментарий начинается с символа # и продолжается до конца строки.

Ниже приведён пример короткого сценария:

#!/bin/sh

date

who

Примечание: несколько команд в сценарии могут записываться в одну строку. В качестве разделителя между ними необходимо указывать точку с запятой (;). Например:

#!/bin/sh

date; who;

Переменные

Переменная – это программный объект, способный принимать значение. Оболочка разрешает создавать и удалять переменные, а также присваивать им значения. В большинстве случаев разработчик ответственен за управление переменными в сценариях. Использование переменных позволяет создавать гибкие, легко адаптируемые сценарии. Имена переменных определяются по тем же правилам, что и в языке программирования С.

Определяются переменные следующим образом (отсутствие пробелов до и после символа = существенно):

имя_переменной=значение

Все переменные по умолчанию имеют строковый тип. Например, MY_NAME=Sergey определяет переменную с именем MY_NAME и присваивает ей значение Sergey. В переменной можно сохранять любое нужное значение. Особый случай – когда это значение содержит пробелы. Для правильного выполнения такого действия указанное значение достаточно заключить в кавычки.

Если переменной присвоена последовательность чисел, то значение этой переменной будет трактоваться как число. Например, а=12345. Теперь переменную а можно использовать в арифметических выражениях.

Для того чтобы получить значение переменной, перед её именем необходимо поставить знак $, а имя переменной заключить в фигурные скобки.

Например, в результате выполнения команды

echo a

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

echo ${a}

будет напечатано число 12345.

Примечание: при подстановке значений переменных фигурные скобки в большинстве случаев можно опускать. Но обратите внимание, что в результате выполнения команды

echo ${a}1

к значению переменной а будет дописана 1, то есть получим значение 123451, а в результате выполнения команды

echo $a1

на терминал будет выведено значение переменной a1, если она определена в программе и ничего не будет выведено, если переменная a1 не определена.

С помощью конструкции ${#имя_переменной} можно получить количество символов в определенной переменной (длину переменной).

С помощью конструкции ${имя_переменной:m:n} можно выделить подстроку из определенной переменной (здесь где m – номер позиции, начиная с которой будет производиться выделение подстроки, а n – количество выделяемых символов).

Примечание: значение n можно опускать. Тогда будет производиться выделение символов до конца строки.

В том случае, когда некоторая переменная становится ненужной, её можно удалить с помощью команды unset имя_переменной.

Ниже приведён пример, иллюстрирующий работу с переменными в сценариях.

#!/bin/bash

MY_NAME=Sergey

MY_FULL_NAME="Sergey B. Sidorov"

echo name = $MY_NAME and full name = $MY_FULL_NAME

echo Length of my full name is ${#MY_FULL_NAME} symbols

echo My surname is ${MY_FULL_NAME:10}

m=0

n=6

echo My name is ${MY_FULL_NAME:m:n} #подстановка распространяется на

#все переменные в фигурных скобках

echo ${MY_FULL_NAME:10:5}

unset MY_NAME

В результате выполнения сценария на терминал будет выдано сообщение:

name = Sergey and full name = Sergey B. Sidorov

Length of my full name is 17 symbols

My surname is Sidorov

My surname is Sergey

Sidor

Все рассмотренные выше примеры переменных – это примеры скалярных переменных, то есть таких, которые могут хранить только одно значение. Наряду с ними можно использовать переменные-массивы. Доступ к элементам массива осуществляется операцией индексирования []. Язык программирования оболочки не требует предварительного объявления переменной массивом с указанием его размерности. При этом отдельные элементы массива создаются по мере доступа к ним. Ниже приведён пример работы с массивом NAME.

#!/bin/sh

NAME[0]=Сергей

NAME[10]=Катя

NAME[2]=Лиза

echo все имена: ${NAME[*]}

echo ${NAME[10]} и ${NAME[2]} сестры

Если вместо индекса элемента использовать *, результатом выражения будет список значений всех элементов массива (в данном случае таковых три).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]