Bash main
Shebang
Section titled “Shebang”#!/usr/bin/env bashПодсказка: второй способ
#!/bin/bash
Добавь в начало скрипта после shebang
set -euo pipefail-e— скрипт прерывается при первой ошибке-u— ошибка при использовании неопределённых переменных-o— если любая команда в pipeline завершилась ошибкой, весь pipeline считается ошибкой
Отключить прерывание при ошибке
set +eПодсказка: включить обратно
set -e
Объявление
Section titled “Объявление”age=25name="bob"base_path="/home/bob/"Важно: между именем, знаком
=и значением не должно быть пробелов
Правила именования переменных
Section titled “Правила именования переменных”- Допускаются буквы (a–z, A–Z)
- Допускаются цифры (от 0 до 9)
- Допускает символ подчеркивания (_)
- Первый символ буква или подчеркивание
- Названия переменных чувствительны к регистру
Специальные переменные
Section titled “Специальные переменные”$0— имя скрипта$*— все аргументы (как строка)$@— все аргументы (как массив отдельных строк)$#— количество аргументов$1— аргументы командной строки (от 1 до 10)${10}— аргументы начиная с 10-го (нужны фигурные скобки)$?— код возврата последней команды$$— PID текущего процесса$!— PID последнего фонового процесса
Переменные среды
Section titled “Переменные среды”BASH_VESION— версия bashPWD— текущий каталогHOME— домашний каталог текущего пользователяUSER— текущий пользовательHOSTNAME— имя системыPATH— пути до каталогов с бинарникамиLANG— языковые настройки системы
Посмотреть все
printenvГлобальные переменные
Section titled “Глобальные переменные”Объявляется вне любой функции
timeout=60Примечание: доступна в любом месте скрипта
Локальные переменные
Section titled “Локальные переменные”Объявляется внутри функции с использованием ключевого слова local
foo() { local count=10 echo "$count"}Примечание: доступна только внутри этой функции
Константы
Section titled “Константы”Их нет, но есть костыль ;-)
readonly PI=3.14159Подстановка команд
Section titled “Подстановка команд”Позволяет перехватывать вывод команды и сохранять его в переменной
varname=$(command)Пример:
today=$(date -d "today" +"%Y-%m-%d")
Объявление
Section titled “Объявление”Создание со значениями
myArray=("one" "two" "three")Поэлементное создание
arr[0]="first"arr[1]="second"arr[3]="fourth"Примечание: индексы могут быть непоследовательны
Доступ и размер
Section titled “Доступ и размер”Важно: всегда используй
"${arr[@]}"в кавычках, иначе элементы с пробелами разобьются на части
Первый элемент
echo "${arr[0]}"Последний элемент
echo "${arr[-1]}"Количество элементов
echo "${#arr[@]}"Все элементы отдельно (каждый на своей строке)
echo "${arr[@]}"Все элементы (строка через пробел/IFS)
echo "${arr[*]}"Добавление
Section titled “Добавление”Добавить в конец
arr+=("new")Изменение
Section titled “Изменение”Изменить элемент
arr[1]="hello"Удаление
Section titled “Удаление”Удалить элемент
unset arr[1]Примечание: в индексе будет пустота
Получить срез массива
echo "${arr[@]:1:2}"Примечание: выведет 2 элемента, начиная с индекса 1
Манипуляции
Section titled “Манипуляции”Замена во всех элементах
echo "${arr[@]//а/А}"//— заменить все вхождения