July 13

Шпаргалка по 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!"

Переменные окружения

  • Экспорт переменных:export PATH=$PATH:/usr/local/bin
  • Просмотр переменных окружения:env printenv

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

  • $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")
  • ${array[0]} — первый элемент.
  • ${array[@]} — все элементы.
  • ${#array[@]} — количество элементов.

Пример:

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

Логические операторы

  • && — И (AND).
  • || — ИЛИ (OR).
  • ! — НЕ (NOT).

Пример:

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

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