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-программе) следует впереди ставить "$".
Важную роль при создании уникальных файлов играет специальная переменная "$$",
значение которой соответствует номеру процесса, выполняющего данный расчет.
Каждый новый расчет, выполняемый компьютером, инициирует один или несколько
процессов, автоматически получающих номера по порядку. Поэтому, используя номер
процесса в качестве имени файла, можно быть уверенным, что каждый новый файл
будет иметь новое имя (не запишется на место уже существующего). Достоинство
является и главным недостатком такого способа именования файлов. Неизвестно,
какие имена будут присвоены файлам. И, если в рамках данного процесса можно
найти файл "не глядя", т.е., обратившись к нему, используя $$, то потом такие
файлы можно легко потерять. Это создает дополнительные проблемы при отладке
программ.
... не зависимый от языка способ создания кода и привязки его к запросам Web-страниц, — .NET Web Forms — управляемую событиями программную модель взаимодействия с элементами управления. Она делает программирование Web-страниц аналогичным программированию форм Visual Basic. ASP.NET содержит развитые средства управления сеансами и функции защиты. Она надежнее, и производительность ее значительно выше ...
... "проверки заразности" (taint checks) в Perl? Как их включить? Как мы видели, одна из наиболее часто встречающихся проблем с безопасностью при программировании CGI - передача оболочке ОС пользовательских переменных без их проверки. Perl предлагает механизм проверки "заразности", который не позволяет этого делать. Любая переменная, которая проинициирована данными за пределами программы (включая ...
льный для каждого маршрута): "c: Курсовая моя < название маршрута > .txt" В таких файлах информация представлена например в следующем виде: автобус, 512 водитель, Батуров П.П. кондуктор, Иванова И.И. автобус, 513 водитель, Рябова Т.И. кондуктор, Шишкова Ю.М. автобус, 514 водитель, Продидж Н.Н. кондуктор, Мартысюк С.С. остановка, , 405, 4680 остановка, , 915, 2730 остановка, , ...
... интерфеса и интерфейса локольной сети · Предложение о выборе вариантов загрузки При этом возможен вариант запгрузки как с SCSI устройства (диск, CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен быть предварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, в его задачи входит загрузка вторичного загрузчика ...
0 комментариев