Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.практикумСП.doc
Скачиваний:
39
Добавлен:
31.03.2015
Размер:
5.99 Mб
Скачать

10.8. Приглашение ко вводу

В оболочке bash различают подсказки двух уровней:

  • Приглашение системы, ожидающей ввода команды. Оно является приглашением по умолчанию и обозначается символом “$”. Если Вы зарегистрировались с именем root, подсказкой будет символ “#”. Изменить подсказку первого уровня можно через переменную среды PS1. PS1=”подсказка по вводу команды”.

  • Приглашение системы, ожидающей завершения команды. По умолчанию обозначается символом “>”. Для ее изменения используется переменная среды PS2. PS2=”подсказка к завершению команды”.

Подсказки могут также содержать и специальные символы, которые указаны в таблице 10.1.

Таблица 10.1

Специальные символы

Символ

Описание

\!

Отображает номер команды с учетом истории команд

\\

Отображает обратный слэш

\d

Отображает текущую дату

\t

Отображает текущее время

\u

Отображает имя текущего пользователя

\w

Отображает текущий рабочий каталог

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

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

Это делается с помощью команды: $ chmod +х имя_файла. Запуск скрипта в режиме командной строки: $ sh имя_файла.

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

  • Встроенные переменные оболочки, которые определяются используемой средой.

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

Задать переменной новое значение: $ имя_переменной=значение. В языке оболочки shell не требуется предварительного объявления переменных при присваивании им значений. Это означает также и то, что одна и та же переменная может использоваться для хранения значений различного типа, в частности символьных и числовых, например, X=apple или X=4. Чтобы получить значение переменной, необходимо перед именем переменной поставить знак $: $ echo $имя_переменной. Эта команда выведет содержимое переменной на экран.

Пример. $ myname=Julia

$ echo $myname

Julia

Позиционные параметры. В shell имеется особый вид переменных, называемых позиционными параметрами, для которых существенна очередность их следования. Эти переменные используются для ссылки на значения (параметры), передаваемые в командный файл через командную строку. Таких переменных десять и они нумеруются от 0 до 9. При исполнении скрипта, использующего параметры командной строки, каждая из них помещается в соответствующую стандартную переменную, имеющую номер, соответствующий номеру параметра. Первый параметр записывается в переменную 1, второй – в переменную 2 и т.д. Имена переменных зарезервированы оболочкой и не могут использоваться в качестве имен для пользовательских переменных. При обращении к позиционным параметрам перед номером переменной ставится знак доллара “$”.

Пример. $ sh testflor sharon ryan robert

$0 $1 $2 $3 $4

Назначения некоторых из встроенных переменных приведены в таблице 10.2.

Таблица 10.2

Встроенные переменные

Переменная

Описание

$#

Хранит количество аргументов командной строки, передаваемых в программу shell

$?

Хранит выходное значение последней выполненной команды

$0

Хранит имя сценария shellпервое слово командной строки

$*

Хранит все аргументы командной строки через пробелы

$@

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

Кавычки. В среде программирования shell кавычки играют значительную роль. Различают несколько видов кавычек.

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

Пример. $ myname=”Julia Robots”. В переменную myname будет сохранено значение Julia Robots.

Прямые апострофы. Прямые апострофы применяются для экранирования от shell специальных символов.

Пример. $ echo $myname’

$myname

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

Пример. $ rate = \$5

$ echo $rate

$5

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

Условный оператор if. Данный оператор используется для организации ветвлений в скриптах shell, когда в зависимости от заданных условий и значений переменных выбирается, то или иное действие. Структура оператора следующая:

if [выражение] then

список команд

elif [выражение1]

then

список команд

else

список команд

fi

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

Пример.

if [-f $1]

then

echo “объект $1 является файлом”

elif

[-d $1]

then

echo “объект $1 является каталогом”

else

echo “ $1 не является ни файлом, ни каталогом”

fi

Оператор выбора case. Используется для сравнения шаблона с некоторыми другими шаблонами, в случае совпадения с одним из них исполняется определенный блок кода. При анализе строк в качестве шаблонов сравнения могут использоваться метасимволы. Структура оператора следующая:

case string in

str1)

команды;;

str2)

команды;;

*)

команды;;

esac

Строка string сравнивается с шаблонами str1 и str2. В случае совпадения с одним из этих значений, выполняется соответствующий ему блок кода. Если ни одно из заданных значений str1 и str2 не является аналогом строки string, выполняются команды, указанные после звездочки.

Пример.

echo “Меню:

echo1. Завтрак

echo2. Обед

echo3. Ужин

echoСделайте свой выбор

read choice

case $choice in

1) echoНа завтрак – кукурузные хлопья с молоком”;;

2) echoНа обед – жареный рис с овощами”;;

3) echoНа ужин – шпинат, запеченный с сыром”;;

*) echoПожалуйста, введите значения от 1 до 3”;;

esac

Операторы циклов. Язык shell позволяет выполнять повторяющиеся циклические действия. Наиболее распространенным является цикл for. Данный цикл исполняет заданный внутри него фрагмент кода определенное число раз:

for var in список

do

команды

done

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

Пример.

for num in 1 2 3 4 5 6

do

echoЧисло - $num

done

Другая форма записи цикла for имеет вид:

for var

do

команды

done

В этом случае цикл выполняется по одному разу для каждого элемента переменной var. При этом предполагается, что var содержит все позиционные параметры, переданные в программу shell в командной строке.

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

clear

tot=0

for temp in *

do

if [ -x $temp]

then

tot=’expr $tot + 1’

fi

done

echo Исполняемых файлов $tot

Работа сценария представлена ниже.

$ sh cntexex

Исполняемых файлов 13