| Advanced Bash-Scripting Guide: Искусство программирования на языке сценариев командной оболочки; Версия 2.5 (15 февраля 2004) | ||
|---|---|---|
| Назад | Вперед | |
В нижеследующем справочнике представлена информация, касающаяся отдельных моментов написания сценариев на языке командной оболочки 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` | Команда исполняется в подоболочке, результат записывается в переменную |
| Назад | В начало документа | Вперед |
| Дополнительные примеры сценариев | Маленький учебник по Sed и Awk |