Шпаргалка по Bash-скриптам (.sh)
Недавно мне пришлось активно использовать Bash для автоматизации задач, которые было проще решить скриптами. Раньше я не работал с Bash так интенсивно, поэтому пришлось разобраться. Чтобы не забыть основные моменты, я составил эту шпаргалку. Надеюсь, она будет полезна и другим начинающим!
Bash-скрипты — это мощный инструмент для автоматизации задач в Unix-подобных системах, позволяющий выполнять команды последовательно, задавать логику их выполнения с помощью переменных, условий и циклов.
Переменные
Объявление переменных
variable_name=value
name="Ivan" # Строка age=30 # Число files=$(ls) # Результат команды ls
Использование переменных
$variable_name
${variable_name}
Второй вариант полезен в составе строк.
echo "Hello, $name!" # Выведет: Hello, Ivan!
echo "You are ${age} years old." # Выведет: You are 30 years old.
Кавычки
- Двойные кавычки (
"): Разрешают интерполяцию переменных.name="Ivan" greeting="Hello, $name!" echo "$greeting" # Выведет: Hello, Ivan! - Одинарные кавычки (
'): Запрещают интерполяцию.greeting='Hello, $name!' echo "$greeting" # Выведет: Hello, $name! - Обратные кавычки (`) или
$(): Для выполнения команд.current_date=$(date +"%Y-%m-%d") echo "Сегодня $current_date" # Выведет: Сегодня 2025-07-13
Чтение пользовательского ввода
read variable_name
echo "Введи свое имя:" read name echo "Привет, $name!"
Переменные окружения
Специальные переменные
$0— имя скрипта.$1,$2, ...,$9— аргументы скрипта.$#— количество аргументов.$@— все аргументы (как отдельные строки).$*— все аргументы (как одна строка).
echo "Script name: $0" echo "First argument: $1" echo "Number of arguments: $#" echo "All arguments: $@"
Удаление переменных
unset variable_name
name="Ivan" unset name echo "Name: $name" # Ничего не выведет
Значения по умолчанию
${variable:-default_value}
echo "Hello, ${name:-Guest}!" # Выведет: Hello, Guest! (если name не задана)
Проверка на пустоту
if [ -z "$variable" ]; then
echo "Variable is empty"
fi
if [ -z "$name" ]; then
name="Guest"
fi
echo "Hello, $name!"
Локальные переменные в функциях
local variable_name=value
my_function() {
local local_var="I'm local"
echo "$local_var"
}
my_function
echo "$local_var" # Ничего не выведет
Конкатенация строк
new_string="$string1$string2"
greeting="Hello, " name="John" message="$greeting$name!" echo "$message" # Выведет: Hello, John!
Числовые операции
$((expression))
a=5 b=10 sum=$((a + b)) echo "Sum: $sum" # Выведет: 15
Чтение файла в переменную
variable=$(<filename)
content=$(<file.txt) echo "$content"
Массивы
array=("value1" "value2" "value3")
fruits=("Apple" "Banana" "Cherry")
echo "First fruit: ${fruits[0]}" # Выведет: Apple
echo "All fruits: ${fruits[@]}" # Выведет: Apple Banana Cherry
Экспорт функций
export -f function_name
my_function() {
echo "Hello from my_function!"
}
export -f my_function
Проверка существования переменной
if [ -v variable_name ]; then
echo "Variable exists"
fi
if [ -v name ]; then
echo "Variable 'name' exists."
else
echo "Variable 'name' does not exist."
fi
Логические выражения
Логические выражения возвращают true или false и используются для условного выполнения команд. В Bash рекомендуется использовать [[ ]] для логических выражений, так как они более надёжны и поддерживают больше возможностей, чем [ ].
Операторы сравнения чисел
[[ $a -eq $b ]]— равно.[[ $a -ne $b ]]— не равно.[[ $a -lt $b ]]— меньше.[[ $a -le $b ]]— меньше или равно.[[ $a -gt $b ]]— больше.[[ $a -ge $b ]]— больше или равно.
Операторы сравнения строк
[[ "$str1" = "$str2" ]]— строки равны.[[ "$str1" != "$str2" ]]— строки не равны.[[ -z "$str" ]]— строка пустая.[[ -n "$str" ]]— строка не пустая.[[ "$str" == *part ]]— строка заканчивается на "part".[[ "$str" == part* ]]— строка начинается с "part".[[ "$str" == *"part"* ]]— строка содержит "part".[[ "$str" =~ regex ]]— строка соответствует регулярному выражению.[[ $a > $b ]]— лексикографическое сравнение (по кодам символов, например, ASCII).
Пример лексикографического сравнения:
if [[ "app" < "ban" ]]; then
echo "app < ban" # Выведет, так как код символа 'a' меньше 'b'
fi
Логические операторы
if [[ $a -gt 0 && $b -gt 0 ]]; then
echo "Оба числа положительные"
fi
Логические операторы для команд
команда1 && команда2— выполняеткоманда2, есликоманда1успешна.команда1 || команда2— выполняеткоманда2, есликоманда1неуспешна.! команда— инвертирует статус выхода команды.
ls /tmp && echo "Директория существует" ls /nonexistent || echo "Директория не существует"
Проверка файлов
[[ -e file ]]— файл существует.[[ -f file ]]— обычный файл.[[ -d file ]]— директория.[[ -r file ]]— доступен для чтения.[[ -w file ]]— доступен для записи.[[ -x file ]]— исполняемый.[[ -s file ]]— файл не пустой.
if [[ -f "file.txt" ]]; then
echo "file.txt — обычный файл"
fi
Условные операторы
Используются для выполнения команд в зависимости от условий.
Синтаксис if
if [[ условие ]]; then
команды
elif [[ другое_условие ]]; then
другие_команды
else
команды_по_умолчанию
fi
read -p "Введи число: " num
if [[ $num -gt 0 ]]; then
echo "Число положительное"
elif [[ $num -lt 0 ]]; then
echo "Число отрицательное"
else
echo "Число равно нулю"
fi
Циклы
Циклы позволяют выполнять команды многократно.
Цикл for
for variable in list; do
команды
done
for i in 1 2 3; do
echo "Итерация: $i"
done
Цикл while
while [[ условие ]]; do
команды
done
count=1
while [[ $count -le 3 ]]; do
echo "Счёт: $count"
((count++))
done
Заключение
Эта шпаргалка охватывает основы написания Bash-скриптов: переменные, массивы, логические выражения, проверки файлов и условные операторы. Используйте её, чтобы быстро вспомнить синтаксис и начать автоматизировать задачи.
Для углублённого изучения рекомендую заглянуть в man bash
man bash
или попробовать написать скрипты для реальных задач, таких как обработка файлов или автоматизация рутинных операций.