Приложение B. Справочная информация

В нижеследующем справочнике представлена информация, касающаяся отдельных моментов написания сценариев на языке командной оболочки Bash.

Таблица B-1. Переменные специального назначения

Переменная Описание
$0 Имя файла сценария
$1 Позиционный параметр #1 (аргумент сценария или функции)
$2 - $9 Позиционные параметры #2 - #9
${10} Позиционный параметр #10
$# Количество позиционных параметров
"$*" Все позиционные параметры (как одно слово) *
"$@" Все позиционные параметры (в виде отдельных строк)
${#*} Количество позиционных параметров, переданых из командной строки
${#@} Количество позиционных параметров, переданых из командной строки
$? Возвращаемое значение
$$ Идентификатор процесса -- Process ID (PID) сценария
$- Флаги, переданные сценарию (командой set)
$_ Последний аргумент предыдущей команды
$! Идентификатор последнего фонового процесса (PID)

*Необходимо заключать в кавычки, в противном случае будет работать как "$@".

Таблица B-2. Операции проверки: Двухместные операции

Оператор Значение ----- Оператор Значение
         
Арифметическое сравнение     Сравнение строк  
-eq Равно   = Равно
      == Равно
-ne Не равно   != Не равно
-lt Меньше   \< Меньше (в кодах ASCII) *
-le Меньше или равно      
-gt Больше   \> Больше (в кодах ASCII) *
-ge Больше или равно      
      -z Пустая строка
      -n Не пустая строка
         
Арифметическое сравнение В двойных круглых скобках (( ... ))      
> Больше      
>= Больше или равно      
< Меньше      
<= Меньше или равно      

*При использовании двойных квадратных скобок [[ ... ]] , необходимо использовать экранирующий символ \ .

Таблица B-3. Операции проверки: Файлы

Оператор Что проверяется ----- Оператор Что проверяется
-e Файл существует   -s Файл не нулевой длины
-f Обычный файл      
-d Файл является каталогом   -r Файл доступен для чтения
-h Файл является символической ссылкой   -w Файл доступен для записи
-L Файл является символической ссылкой   -x Файл доступен для исполнения
-b Файл блочного устройства      
-c Файл символного устройства   -g Установлен флаг sgid
-p Файл является каналом (pipe)   -u Установлен флаг suid
-S Файл является сокетом (socket)   -k Установлен бит "sticky"
-t Файл связан с терминальным устройством      
         
-N Файл был модифицирован с момента последнего чтения   F1 -nt F2 Файл F1 более новый, чем F2 *
-O Вы являетесь владельцем файла   F1 -ot F2 Файл F1 более старый, чем F2 *
-G Вы принадлежите к той же группе, что и файл   F1 -ef F2 Файлы F1 и F2 являются жесткими ссылками на один и тот же файл *
         
! "NOT" (логическое отрицание (инверсия) результатов всех вышеприведенных проверок)      

*Двухместный оператор (требует наличия двух операндов).

Таблица B-4. Подстановка параметров и экспансия

Выражение Описание
${var} Значение переменной var, то же, что и $var
   
${var-DEFAULT} Если переменная var не инициализирована, то результатом вычисления выражения является $DEFAULT *
${var:-DEFAULT} Если переменная var не инициализирована или пуста, то результатом вычисления выражения является $DEFAULT *
   
${var=DEFAULT} Если переменная var не инициализирована, то результатом вычисления выражения является $DEFAULT *
${var:=DEFAULT} Если переменная var не инициализирована, то результатом вычисления выражения является $DEFAULT *
   
${var+OTHER} Если переменная var инициализирована, то результатом вычисления выражения является $OTHER, иначе -- пустая строка
${var:+OTHER} Если переменная var инициализированаset, то результатом вычисления выражения является $OTHER, иначе -- пустая строка
   
${var?ERR_MSG} Если переменная var не инициализирована, то выводится $ERR_MSG *
${var:?ERR_MSG} Если переменная var не инициализирована, то выводится $ERR_MSG *
   
${!varprefix*} Соответствует всем ранее объявленным переменным, чьи имена начинаются с varprefix
${!varprefix@} Соответствует всем ранее объявленным переменным, чьи имена начинаются с varprefix

* Само собой разумеется, если переменная varинициализирована, то результатом выражения будет $var.

Таблица B-5. Операции со строками

Выражение Описание
${#string} Длина строки $string
   
${string:position} Извлечение подстроки из строки $string, начиная с позиции $position
${string:position:length} Извлечение $length символов из строки $string, начиная с позиции $position
   
${string#substring} Поиск кратчайшего совпадения по шаблону $substring, в строке $string, поиск ведется с начала строки
${string##substring} Поиск самого длинного совпадения по шаблону $substring, в строке $string, поиск ведется с начала строки
${string%substring} Поиск кратчайшего совпадения по шаблону $substring, в строке $string, поиск ведется с конца строки
${string%%substring} Поиск самого длинного совпадения по шаблону $substring, в строке $string, поиск ведется с конца строки
   
${string/substring/replacement} Замена первой, найденой по шаблону $substring, подстроки на подстроку $replacement
${string//substring/replacement} Замена всех, найденых по шаблону $substring, подстрок на подстроку $replacement
${string/#substring/replacement} Если в строке $string найдено соответствие шаблону $substring и найденая подстрока начинает строку $string, то она заменяется подстрокой $replacement
Если в строке $string найдено соответствие шаблону $substring и найденая подстрока заканчивает строку $string, то она заменяется подстрокой $replacement  
   
   
expr match "$string" '$substring' Количество совпадений с шаблоном $substring* в строке $string, поиск начинается с начала строки
expr "$string" : '$substring' Количество совпадений с шаблоном $substring* в строке $string, поиск начинается с начала строки
expr index "$string" $substring Позиция (номер символа), первого найденого совпадения с шаблоном $substring, в строке $string
expr substr $string $position $length Извлечение $length символов из строки $string, начиная с позиции $position
expr match "$string" '\($substring\)' Извлечение подстроки с начала строки $string, совпадающей с шаблоном $substring*
expr "$string" : '\($substring\)' Извлечение подстроки с начала строки $string, совпадающей с шаблоном $substring*
expr match "$string" '.*\($substring\)' Извлечение подстроки с конца строки $string, совпадающей с шаблоном $substring*
expr "$string" : '.*\($substring\)' Извлечение подстроки с конца строки $string, совпадающей с шаблоном $substring*

* Где $substring -- регулярное выражение.

Таблица B-6. Прочие конструкции

Выражение Описание
   
Квадратные скобки  
if [ CONDITION ] Проверка условия
if [[ CONDITION ]] Расширеный синтаксис операции проверки условия
Array[1]=element1 Инициализация массива
[a-z] Диапазон символов в регулярных выражениях
   
Фигурные скобки  
${variable} Подстановка параметра
${!variable} Косвенная ссылка на переменную
{ command1; command2 } Блок кода
{string1,string2,string3,...} Подстановка
   
   
Круглые скобки  
( command1; command2 ) Группа команд, исполняемая в подоболочке (subshell)
Array=(element1 element2 element3) Инициализация массива
result=$(COMMAND) Команда исполняется в подоболочке, результат записывается в переменную
>(COMMAND) Подстановка процесса
<(COMMAND) Подстановка процесса
   
Двойные круглые скобки  
(( var = 78 )) Целочисленная арифметика
var=$(( 20 + 5 )) Арифметическое выражение, результат записывается в переменную
   
Кавычки  
"$variable" "Мягкие", или "нестрогие" кавычки
'string' "Строгие", или "полные" кавычки
   
Обратные кавычки  
result=`COMMAND` Команда исполняется в подоболочке, результат записывается в переменную