Интерпретатор командного языка Shell

Рефераты, курсовые, дипломные, контрольные (предпросмотр)

Тип: Реферат. Файл: Word (.doc) в архиве zip. Категория: Информатика, IT
Адрес этого реферата http://referat-kursovaya.repetitor.info/?essayId=24748 или
Загрузить
В режиме предпросмотра не отображаются таблицы, графики и иллюстрации. Для получения полной версии нажмите кнопку «Загрузить». Рефераты, контрольные, дипломные, курсовые работы предоставляются в ознакомительных целях, не для плагиата.
Страница 1 из 4 [Всего 4 записей]1 2 3 4 »

Основные понятия языка Shell

Ввод-вывод

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

Стандартные ввод, вывод и протокол можно переназначить. Обозначение

имя файла

служит для переназначения стандартного ввода (дескриптор файла 0),

имя файла

для стандартного вывода (дескриптор файла 1);

строка

ввод происходит со стандартного ввода, пока не встретится указанная строка или конец файла,

имя файла

для стандартного вывода; если файл существует, то выводимая информация добавляется к конец этого файла,

& цифра

в качестве стандартного ввода об(r)является файл, ассоциированный с дескриптором цифра; аналогично для стандартного вывода

& цифра

&- и &-

закрывают соответственно стандартный ввод и вывод.

Если любой из этих конструкций предшествует цифра, то с указанным файлом будет ассоциирован дескриптор, равный указанной цифре, вместо 0 и 1 по умолчанию. Например,

2 имя файла

для стандартного протокола используется дескриптор 2, а

2 & 1

ассоциирует дескриптор 2 с файлом, ассоциированным с дескриптором 1.

... 2protocol

переназначает стандартный протокол (дескриптор 2) в файл по имени protocol.

Чтобы переназначить стандартный протокол туда же, куда уже назначен стандартный вывод, следует употребить конструкцию

... 2&1

Важен порядок переназначения: shell производит переназначение слева направо по указанному списку. Так,

1 xxx 2 & 1

сначала ассоциирует дескриптор 1 с файлом xxx, а затем дескриптор 2 с 1, т.е. тоже с xxx. А

2 & 1 1 xxx

ассоциирует дескриптор 2 с терминалом, а 1 - с файлом xxx.

Можно переназначить системный ввод на текущий файл:

isql - -

Синхронное и асинхронное выполнение команд

Обычно shell ждет завершения выполнения команды. Однако имеется возможность запустить задачу в асинхронном режиме, т.е. без ожидания ее завершения. Для этого после команды (после всех ее аргументов и указаний о переназначении ввода-вывода) надо поставить знак &. При этом по умолчанию стандартный ввод команды назначается на пустой файл /dev/null.

Пример: создать файл primer можно по команде

echo primer

Еще пример: запустить программу prog в асинхронном режиме, чтобы не надо было дожидаться его завершения, засечь время выполнения, результаты программы направить в файл prog.res, данные о времени выполнения - в файл prog.tim.

time prog prog.res 2 prog.tim &

Конвейер

Конвейер - последовательность команд, разделенных знаком |. Если после конвейера стоит ; shell ждет его завершения. Если & - то не ждет. Роль ; может играть конец строки. Смысл конвейера в том, что стандартный вывод одной команды замыкается на стандартный ввод другой. Пример конвейера - подсчитать число об(r)ектных файлов в текущем каталоге.

ls *.o | wc -l

Метасимволы, генерация имен файлов

Метасимволы - символы, имеющие специальное значение для интерпретатора :

- * ; & ( ) | ^ пробел табуляция возврат_каретки

Однако каждый из этих символов может представлять самого себя, если перед ним стоит \. Все символы, заключенные между кавычками ' и ', представляют самих себя. Между двойными кавычками (") выполняются подстановки команд (см п. 2.2) и параметров (см. п. 2.3), а символы \, `," и $ могут экранироваться предшествующим символом \.

После всех подстановок в каждом слове команды ищутся символы *,?, и [. Если находится хотя бы один из них, то это слово рассматривается как шаблон имен файлов и заменяется именами файлов, удовлетворяющих данному шаблону (в алфавитном порядке). Если ни одно имя файла не удовлетворяет шаблону, то он остается неизменным. Значения указанных символов:

*

любая строка, включая и пустую

?

один любой символ

[...]

любой из указанных между ними символов. Пара символов, разделенных знаком -, означает любой символ, который находится между ними, включая и их самих. Если первым символом после "[" идет "!", то указанные символы не должны входить в имя файла

Синтаксис языка shell

Комментарии

Строки, начинающиеся с #, трактуются как комментарии.

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

Выражения можно заключать в обратные кавычки (`). Такие выражения вычисляются в месте использования. Они могут быть, например, частью строк. Пример. Пусть параметром макрокоманды является имя файла с расширением .for. Требуется удалить одноименный файл с расширением .err.

name=`ena -n $1`

rm -f ${name}.err

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

ena -n $1

присваивается переменной name. Фигурные скобки использованы для выделения аргумента операции перехода от имени к значению. Без них .err приклеилась бы к имени.

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

Все переменные в языке shell - текстовые. Их имена должны начинаться с буквы и состоять из латинских букв, цифр и знака подчеркивания (_). Чтобы воспользоваться значением переменной, надо перед ней поставить символ $. Использование значения переменной называется подстановкой.

Различается два класса переменных: позиционные и с именем. Позиционные переменные - это аргументы командных файлов, их именами служат цифры: $0 - имя команды, $1 - первый аргумент и т.д. Значения позиционным переменным могут быть присвоены и командой set (см. Специальные команды). Пример. После вызова программы на shellе, хранящейся в файле ficofl:

ficofl -d / \*.for

значением $0 будет ficofl, $1 - -d, $2 - /, $3 - *.for, значения остальных позиционных переменных будут пустыми строками. Заметим, что если бы символ * при вызове ficofl не был экранирован, в качестве аргументов передались бы имена всех фортранных файлов текущей директории.

Еще две переменные хранят командную строку за исключением имени команды: $@ эквивалентно $1 $2 ..., а $* - "$1 $2 ...". Начальные значения переменным с именем могут быть установлены следующим образом:

имя=значение [ имя=значение ] ...

Не может быть одновременно функции (см. Управляющие конструкции) и переменной с одинаковыми именами. Для подстановки значений переменных возможны также следующие конструкции:

${переменная}

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

${переменная:-слово}

если переменная определена и не является пустой строкой, то подставляется ее значение; иначе подставляется слово.

${переменная:=слово}

если переменная не определена или является пустой строкой, ей присваивается значение слово; после этого подставляется ее значение.

${переменная:?слово}

если переменная определена и не является пустой строкой, то подставляется ее значение; иначе на стандартный вывод выводится слово и выполнение shellа завершается. Если слово опущено, то выдается сообщение "parameter null or not set".

${переменная:+слово}

если переменная определена и не является пустой строкой, то подставляется слово; иначе подставляется пустая строка.

Пример: если переменная d не определена или является пустой строкой, то выполняется команда pwd

echo ${d:-`pwd`}

Следующие переменные автоматически устанавливаются shell'ом:

#

количество позиционных параметров (десятичное)

-

флаги, указанные при запуске shellа или командой set

?

десятичное значение, возвращенное предыдущей синхронно выполненной командой

$

номер текущего процесса

!

номер последнего асинхронного процесса

@

эквивалентно $1 $2 $3 ...

*

эквивалентно "$1 $2 $3 ..."

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

echo $$

Специальные переменные

Shell'ом используются следующие специальные переменные:

RSSСтраница 1 из 4 [Всего 4 записей]1 2 3 4 »


При любом использовании материалов сайта обязательна гиперссылка на сайт «Репетитор».
Разработка и Дизайн компании Awelan
www.megastock.ru
Проверить аттестат