3.8. Вызов интерпритатора
Вслед за регистрацией пользователя в системе (с помощью команды login)
вызывается интерпретатор языка SHELL. Если регистрационный справочник
пользователя содержит файл .profile, то прежде чем с терминала будет принята
хотя бы одна команда, интерпретатор выполняет этот файл (подразумевается, что
файл .profile содержит команды). При вызове могут указываться следующие ключи:
-c строка
Команды считываются из заданной строки.
-s
Команды читаются из стандартного файла ввода. Сообщения интерпретатора
записываются в стандартный файл диагностик.
-i
Интерактивный режим работы.
Если первым символом параметра "0" является знак -, то команды считываются из
файла .profile.
4. ПРОГРАММНЫЕ СТРУКТУРЫ
Как во всяком языке программирования в тексте на языке shell могут быть
комментарии. Для этого используется символ "#". Все, что находится в строке (в
командном файле) левее этого символа, воспринимается интерпретатором как
комментарий. Например,
# Это комментарий.
Как во всяком процедурном языке программирования в языке shell есть операторы.
Ряд операторов позволяет управлять последовательностью выполнения команд. В
таких операторах часто необходима проверка условия, которая и определяет
направление продолжения вычислений.
4.1. Команда test ("[ ]")
Команда test проверяет выполнение некоторого условия. С использованием этой
(встроенной) команды формируются операторы выбора и цикла языка shell.
Два возможных формата команды:
test условие
или
[ условие ]
мы будем пользоваться вторым вариантом, т.е. вместо того, чтобы писать перед
условием слово "test", будем заключать условие в скобки, что более привычно для
программистов.
На самом деле shell будет распознавать эту команду по открывающей скобке "[",
как слову, соответствующему команде "test". Между скобками и содержащимся в них
условием обязательно должны быть пробелы.
Пробелы должны быть и между значениями и символом сравнения или операции
В shell используются условия различных "типов".
УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ:
-f file файл "file" является обычным файлом;
-d file файл "file" - каталог;
-с file файл "file" - специальный файл;
-r file имеется разрешение на чтение файла "file";
-w file имеется разрешение на запись в файл "file";
-s file файл "file" не пустой.
УСЛОВИЯ ПРОВЕРКИ СТРОК:
str1 = str2 строки "str1" и "str2" совпадают;
str1 != str2 строки "str1" и "str2" не совпадают;
-n str1 строка "str1" существует (непустая);
-z str1 строка "str1" не существует (пустая).
Примеры.
x="who is who"; export x; [ "who is who" = "$x" ]; echo $?
0
x=abc ; export x ; [ abc = "$x" ] ; echo $?
0
x=abc ; export x ; [ -n "$x" ] ; echo $?
0
x="" ; export x ; [ -n "$x" ] ; echo $?
1
Кроме того, существуют два стандартных значения условия, которые могут
использоваться вместо условия (для этого не нужны скобки).
УСЛОВИЯ СРАВНЕНИЯ ЦЕЛЫХ ЧИСЕЛ:
x -eq y "x" равно "y",
x -ne y "x" неравно "y",
x -gt y "x" больше "y",
x -ge y "x" больше или равно "y",
x -lt y "x" меньше "y",
x -le y "x" меньше или равно "y".
СЛОЖНЫЕ УСЛОВИЯ:
Реализуются с помощью типовых логических операций:
! (not) инвертирует значение кода завершения.
-o (or) соответствует логическому "ИЛИ".
-a (and) соответствует логическому "И".
4.2. Условный оператор "if"
В общем случае оператор "if" имеет структуру
if условие
then список
[elif условие
then список]
[else список]
fi
Здесь "elif" сокращенный вариант от "else if" может быть использован наряду с
полным, т.е. допускается вложение произвольного числа операторов "if" (как и
других операторов). Разумеется "список" в каждом случае должен быть осмысленный
и допустимый в данном контексте.
Самая усеченная структура этого оператора
if условие
then список
fi
если выполнено условие (как правило это ком получен код завершения "0", то
выполняется "список", иначе он пропускается.
Примеры.
Пусть написан "if-1"
if [ $1 -gt $2 ]
then pwd
else echo $0 : Hello!
fi
Тогда вызов if-1 12 11 даст /home/sae/STUDY/SHELL
а if-1 12 13 даст if-1 : Hello!
4.3. Оператор вызова ("case")
Оператор выбора "case" имеет структуру:
case строка in
шаблон) список команд;;
шаблон) список команд;;
...
шаблон) список команд;;
esac
Здесь "case" "in" и "esac" - служебные слова. "Строка" (это может быть и один
символ) сравнивается с "шаблоном". Затем выполняется "список команд" выбранной
строки.
Непривычно выглядят в конце строк выбора ";;", но написать здесь ";" было бы
ошибкой. Для каждой альтернативы может быть выполнено несколько команд. Если эти
команды будут записаны в одну строку, то символ ";" будет использоваться как
разделитель команд.
Обычно последняя строка выбора имеет шаблон "*", что в структуре "case" означает
"любое значение". Эта строка выбирается, если не произошло совпадение значения
переменной (здесь $z) ни с одним из ранее записанных шаблонов, ограниченных
скобкой ")". Значения просматриваются в порядке записи.
... не зависимый от языка способ создания кода и привязки его к запросам 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 комментариев