Home Blog Certs Knowledge Base About

Bash & Scripting

Справочник по Bash: parameter expansion, специальные переменные, массивы, тесты, циклы, функции. Всё что нужно для написания надёжных shell-скриптов.

Переменные и expansion

Parameter Expansion
ВыражениеРезультат
${VAR}Значение VAR
${VAR:-default}VAR если задан, иначе default (не присваивает)
${VAR:=default}VAR если задан, иначе присвоить default
${VAR:?error msg}VAR если задан, иначе вывести ошибку и выйти
${VAR:+alt}alt если VAR задан, иначе пусто
${#VAR}Длина строки
${VAR:2:5}Подстрока: 5 символов с позиции 2
${VAR^^}Весь текст в ВЕРХНИЙ регистр
${VAR,,}Весь текст в нижний регистр
${VAR^}Первый символ в верхний регистр
${VAR/old/new}Заменить первое вхождение
${VAR//old/new}Заменить все вхождения
${VAR#prefix}Удалить кратчайший префикс (glob)
${VAR##prefix}Удалить длиннейший префикс
${VAR%suffix}Удалить кратчайший суффикс
${VAR%%suffix}Удалить длиннейший суффикс

Специальные переменные

Special Parameters
ПеременнаяЗначение
$0Имя скрипта / оболочки
$1 .. $9Позиционные параметры
${10} ..Параметры ≥ 10 (нужны фигурные скобки)
$@Все параметры как отдельные слова (с кавычками)
$*Все параметры как одна строка
$#Количество параметров
$?Код выхода последней команды
$$PID текущего процесса (shell)
$!PID последнего фонового процесса
$_Последний аргумент предыдущей команды
$-Текущие флаги оболочки

Массивы

Arrays
ВыражениеОписание
arr=(alpha beta gamma)Объявить массив
arr[0]="delta"Присвоить элемент
arr+=("epsilon")Добавить в конец
${arr[0]}Первый элемент
${arr[-1]}Последний элемент
${arr[@]}Все элементы (по отдельности)
${arr[*]}Все элементы (одна строка)
${#arr[@]}Длина массива
${arr[@]:1:2}Срез: 2 элемента с индекса 1
unset arr[1]Удалить элемент
declare -A mapАссоциативный массив (hash)
map[key]="value"Присвоить ключ
${!map[@]}Все ключи ассоциативного массива

Тесты

Файловые операторы
ФлагИстина если
-e fileСуществует (любой тип)
-f fileОбычный файл
-d fileДиректория
-s fileФайл не пустой (size > 0)
-L fileСимволическая ссылка
-r / -w / -xЧитаемый / записываемый / исполняемый
-O fileПринадлежит текущему пользователю
f1 -nt f2f1 новее f2
f1 -ot f2f1 старее f2
Строковые и числовые операторы
ВыражениеИстина если
-z strСтрока пустая
-n strСтрока не пустая
str1 = str2Строки равны
str1 != str2Строки не равны
str =~ regexСовпадает с regex (только [[ ]])
n1 -eq n2Числа равны
n1 -ne n2Числа не равны
n1 -lt / -le / -gt / -ge n2< / ≤ / > / ≥

Условия и циклы

Управляющие конструкции
КонструкцияОписание
if [[ cond ]]; then ...; elif ...; else ...; fiУсловный блок
[[ cond ]] && cmdВыполнить cmd если истина
[[ cond ]] || cmdВыполнить cmd если ложь
case "$v" in pat1) ...;; pat2|pat3) ...;; *) ...;; esacSwitch/case
for i in {1..10}; do ...; doneRange loop
for f in *.txt; do ...; doneGlob loop
for (( i=0; i<10; i++ )); do ...; doneC-style loop
for item in "${arr[@]}"; do ...; doneArray loop
while IFS= read -r line; do ...; done < fileЧитать строки из файла
while IFS= read -r line; do ...; done < <(cmd)Читать строки из команды
until [[ cond ]]; do ...; doneUntil loop
break / continueВыйти / продолжить цикл

Функции

Functions
КонструкцияОписание
myfunc() { ...; }Объявить функцию
function myfunc { ...; }Альтернативный синтаксис
local var="$1"Локальная переменная (только в функции)
return 0 / return 1Код выхода функции
result=$(myfunc args)Захватить вывод функции
myfunc "$@"Передать все аргументы скрипта в функцию
declare -f myfuncПоказать определение функции
unset -f myfuncУдалить функцию