3.5. Параметры

В командный файл могут быть переданы параметры. В shell используются позиционные

параметры (т.е. существенна очередность их следования). В командном файле

соответствующие параметрам переменные (аналогично shell-переменным) начинаются с

символа "$", а далее следует одна из цифр от 0 до 9:

Пусть "examp-1" вызывается с параметрами "cock" и "tail". Эти параметры попадают

в новую среду под стандартными именами "1" и "2". В (стандартной) переменной с

именем "0" будет храниться имя вызванного расчета.

При обращении к параметрам перед цифрой ставится символ доллара "$" (как и при

обращении к переменным):

$0 соответствует имени данного командного файла;

$1 первый по порядку параметр;

$2 второй параметр и т.д.

Поскольку число переменных, в которые могут передаваться параметры, ограничено

одной цифрой, т.е. 9-ю ("0", как уже отмечалось имеет особый смысл), то для

передачи большего числа параметров используется специальная команда "shift".

Своеобразный подход к параметрам дает команда "set".

Например, фрагмент

set a b с

echo первый=$1 второй=$2 третий=$3

выдаст на экран

первый=a второй=b третий=c

т.е. команда "set" устанавливает значения параметров. Это бывает очень удобно.

Например, команда "date" выдает на экран текущую дату, скажем, "Mon May 01

12:15:10 2000", состоящую из пяти слов, тогда

set `date`

echo $1 $3 $5

выдаст на экран

Mon 01 2000

Команда "set" позволяет также осуществлять контроль выполнения программы,

например:

set -v на терминал выводятся строки, читаемые shell.

set +v отменяет предыдущий режим.

set -x на терминал выводятся команды перед выполнением.

set +x отменяет предыдущий режим.

Команда "set="Times New Roman">" без параметров выводит на терминал состояние

программной среды.

3.6. Подстановки shell-интерпретатора

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

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

ПОДСТАНОВКА РЕЗУЛЬТАТОВ. Выполняются все команды, заключенные в обратные

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

ПОДСТАНОВКА ЗНАЧЕНИЙ ПАРАМЕТРОВ И ПЕРЕМЕННЫХ. То есть слова, начинающиеся на

"$", заменяются соответствующими значениями переменных и параметров.

ИНТЕРПРЕТАЦИЯ ПРОБЕЛОВ. Заэкранированные пробелы игнорируются.

ГЕНЕРАЦИЯ ИМЕН ФАЙЛОВ. Проверяются слова на наличие в них спецсимволов ("*",

"?","[]") и выполняются соответствующие генерации.

3.7. Программная среда

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

переменных этой среды.

Если вы наберете команду "set" без параметров, то на экран будет выдана

информация о ряде стандартных переменных, созданных при входе в систему (и

передаваемых далее всем вашим новым процессам "по наследству"), а также

переменных, созданных и экспортируемых вашими процессами.

Конкретный вид и содержание выдаваемой информации в немалой степени зависит от

того, какая версия UNIX используется и как инсталлирована система.

 

Результат выполнения команды set без параметров (не полный):

HOME=/root

PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11:

IFS=

LOGNAME=sae

MAIL=/var/spool/mail/sae

PWD=/home/sae/STUDY/SHELL

PS1=${PWD}:" "

PS2=>

SHELL=/bin/bash

Прокомментируем значения переменных.

HOME=/root - это имя домашнего директория, в котором пользователь оказывается

после входа в систему. То есть, правильно набрав имя и пароль, я окажусь в

директории "/root".

PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - эта переменная задает

последовательность файлов, которые просматривает "shell" в поисках команды.

Имена файлов разделяются здесь двоеточиями. Последовательность просмотра

соответствует очередности следования имен в тропе. Но первоначально поиск

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

входят наиболее часто используемые команды, например "echo", "cd", "pwd",

"date". После этого система просматривает директорий "/bin", в котором могут

находиться команды "sh", "cp", "mv", "ls" и т.п. Затем директорий "/usr/bin" с

командами "cat", "сс", "expr", "nroff", "man" и многими другими. Далее поиск

происходит в текущем директории (".", или другое обозначение "пусто", т.е.""),

где скорее всего находятся написанные вами команды.

После набора командной строки и нажатия <Enter> "shell" (после выполнения

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

ее поиск в директориях, перечисленных в PATH. Если команда размещена вне этих

директориев, она не будет найдена. Если присутствует несколько команд с

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

просматриваемом первым.

PATH, как и прочие переменные, можно легко менять, добавляя, переставляя или

исключая директории.

IFS= (Внутренний Разделитель Полей) перечисляет символы, которые служат для

разделения слов (полей). Таковыми являются "пробел", "табуляция" и "перевод

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

строки.

LOGNAME=root - имя входа ("имя" пользователя).

MAIL=/var/spool/mail/root - имя файла, в который поступает (электронная) почта.

PWD=/root - имя текущего директория

PS1=${PWD}:" " - вид промтера. В данном случае в промптере будет выдаваться имя

текущего директория двоеточие и пробел. То есть здесь будет "/root: ".

PS2=> - этот промтер (здесь ">") используется как приглашение к продолжению

ввода (в очередной строке) незаконченной команды. Например, наберите открывающую

скобку "(" и после нажатия <Enter> в следующей строке вы увидите этот промптер.

Если пока не знаете, что дальше делать, наберите закрывающую скобку ")" и он

исчезнет.

SHELL=/bin/sh - эта переменная указывает оболочку, которую использует

пользователь. В данном случае используется стандартный shell ("sh").

Исходная среда устанавливается автоматически при входе в систему с

использованием файлов типа "/etc/rc" и "/etc/.profile".

Один из способов просто изменит среду (например, тропу поиска команд, вид

промтера, вид оболочки, цвет экрана и т.п.) можно, разместив эту информацию в

своем домашнем директории в специализированном файле ".profile"

(${HOME}/.profile), присвоив нужные значения переменным среды. То есть вызвать

это файл в редактор и написать, что пожелаете). Тогда при каждом вашем входе в

систему этот файл будет автоматически выполняться и устанавливать новую среду.

Этот файл должен ОБЯЗАТЕЛЬНО размещаться в вашем ДОМАШНЕМ директории (директории

входа).

Следует иметь в виду, что имена файлов, начинающиеся с точки, вообще имеют

особый статус. Так, они не выдаются на экран простой командой "ls" - необходимо

вызывать эту команду с флагом "-a". Кстати, и не уничтожаются огульно командой

"rm *".

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

(параметрам):

?значение, возвращенное последней командой;

$номер процесса;

!номер фонового процесса;

#число позиционных параметров, передаваемых в shell;

*перечень параметров, как одна строка;

@перечень параметров, как совокупность слов;

-флаги, передаваемые в shell.

При обращении к этим переменным (т.е при использовании их в командном файле -

shell-программе) следует впереди ставить "$".

Важную роль при создании уникальных файлов играет специальная переменная "$$",

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

Каждый новый расчет, выполняемый компьютером, инициирует один или несколько

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

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

будет иметь новое имя (не запишется на место уже существующего). Достоинство

является и главным недостатком такого способа именования файлов. Неизвестно,

какие имена будут присвоены файлам. И, если в рамках данного процесса можно

найти файл "не глядя", т.е., обратившись к нему, используя $$, то потом такие

файлы можно легко потерять. Это создает дополнительные проблемы при отладке

программ.


Информация о работе «Программирование на Shell»
Раздел: Информатика, программирование
Количество знаков с пробелами: 39235
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
89611
3
4

... не зависимый от языка способ создания кода и привязки его к запросам Web-страниц, — .NET Web Forms — управляемую событиями программную модель взаимодействия с элементами управления. Она дела­ет программирование Web-страниц аналогичным программи­рованию форм Visual Basic. ASP.NET содержит развитые сред­ства управления сеансами и функции защиты. Она надежнее, и производительность ее значительно выше ...

Скачать
9700
0
0

... "проверки заразности" (taint checks) в Perl? Как их включить? Как мы видели, одна из наиболее часто встречающихся проблем с безопасностью при программировании CGI - передача оболочке ОС пользовательских переменных без их проверки. Perl предлагает механизм проверки "заразности", который не позволяет этого делать. Любая переменная, которая проинициирована данными за пределами программы (включая ...

Скачать
43471
0
3

льный для каждого маршрута): "c: Курсовая моя < название маршрута > .txt" В таких файлах информация представлена например в следующем виде: автобус, 512 водитель, Батуров П.П. кондуктор, Иванова И.И. автобус, 513 водитель, Рябова Т.И. кондуктор, Шишкова Ю.М. автобус, 514 водитель, Продидж Н.Н. кондуктор, Мартысюк С.С. остановка, , 405, 4680 остановка, , 915, 2730 остановка, , ...

Скачать
374863
43
0

... интерфеса и интерфейса локольной сети ·     Предложение о выборе вариантов загрузки При этом возможен вариант запгрузки как с SCSI устройства (диск, CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен быть предварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, в его задачи входит загрузка вторичного загрузчика ...

0 комментариев


Наверх