Интерпретатор командного языка shell. Синтаксис языка shell
2. Синтаксис языка shell
2.1. Комментарии
Строки, начинающиеся с #,
трактуются как комментарии.
2.2. Подстановка результатов
выполнения команд
Выражения можно заключать в
обратные кавычки (`). Такие
выражения вычисляются в месте
использования. Они могут быть,
например, частью строк. Пример.
Пусть параметром макрокоманды
является имя файла с расширением
.for. Требуется удалить одноименный
файл с расширением .err.
name=`ena -n $1`
rm -f ${name}.err
Значение, полученное в результате
выполнения команды
ena -n $1
присваивается переменной name.
Фигурные скобки использованы для
выделения аргумента операции
перехода от имени к значению. Без
них .err приклеилась бы к имени.
2.3. Переменные и подстановка их
значений
Все переменные в языке 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 $$
2.4. Специальные переменные
Shell'ом используются следующие
специальные переменные:
HOME |
директория, в которую
пользователь попадает при
входе в систему или при
выполнении команды cd без
аргументов |
PATH |
список полных имен
каталогов, в которых ищется
файл при указании его
неполного имени. |
PS1 |
основная строка
приглашения (по умолчанию $) |
PS2 |
дополнительная
строка приглашения (по
умолчанию >); в интерактивном
режиме перед вводом команды
shell'ом выводится основная
строка приглашения.
Если нажата клавиша new_line, но
для завершения команды
требуется дальнейший ввод, то
выводится дополнительная
строка приглашения |
IFS |
последовательность
символов, являющихся
разделителями в командной
строке (по умолчанию это
<пробел>, <табуляция> и
<возврат_каретки>) |
Назад | Содержание | Вперед
|