Skip to content

Bash main

#!/usr/bin/env bash

Подсказка: второй способ #!/bin/bash

Добавь в начало скрипта после shebang

Terminal window
set -euo pipefail
  • -e — скрипт прерывается при первой ошибке
  • -u — ошибка при использовании неопределённых переменных
  • -o — если любая команда в pipeline завершилась ошибкой, весь pipeline считается ошибкой

Отключить прерывание при ошибке

Terminal window
set +e

Подсказка: включить обратно set -e

Terminal window
age=25
name="bob"
base_path="/home/bob/"

Важно: между именем, знаком = и значением не должно быть пробелов

Правила именования переменных

Section titled “Правила именования переменных”
  • Допускаются буквы (a–z, A–Z)
  • Допускаются цифры (от 0 до 9)
  • Допускает символ подчеркивания (_)
  • Первый символ буква или подчеркивание
  • Названия переменных чувствительны к регистру

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

Section titled “Специальные переменные”
  • $0 — имя скрипта
  • $* — все аргументы (как строка)
  • $@ — все аргументы (как массив отдельных строк)
  • $# — количество аргументов
  • $1 — аргументы командной строки (от 1 до 10)
  • ${10} — аргументы начиная с 10-го (нужны фигурные скобки)
  • $? — код возврата последней команды
  • $$ — PID текущего процесса
  • $! — PID последнего фонового процесса
  • BASH_VESION — версия bash
  • PWD — текущий каталог
  • HOME — домашний каталог текущего пользователя
  • USER — текущий пользователь
  • HOSTNAME — имя системы
  • PATH — пути до каталогов с бинарниками
  • LANG — языковые настройки системы

Посмотреть все

Terminal window
printenv

Объявляется вне любой функции

Terminal window
timeout=60

Примечание: доступна в любом месте скрипта

Объявляется внутри функции с использованием ключевого слова local

Terminal window
foo() {
local count=10
echo "$count"
}

Примечание: доступна только внутри этой функции

Их нет, но есть костыль ;-)

Terminal window
readonly PI=3.14159

Позволяет перехватывать вывод команды и сохранять его в переменной

Terminal window
varname=$(command)

Пример: today=$(date -d "today" +"%Y-%m-%d")

Создание со значениями

Terminal window
myArray=("one" "two" "three")

Поэлементное создание

Terminal window
arr[0]="first"
arr[1]="second"
arr[3]="fourth"

Примечание: индексы могут быть непоследовательны

Важно: всегда используй "${arr[@]}" в кавычках, иначе элементы с пробелами разобьются на части

Первый элемент

Terminal window
echo "${arr[0]}"

Последний элемент

Terminal window
echo "${arr[-1]}"

Количество элементов

Terminal window
echo "${#arr[@]}"

Все элементы отдельно (каждый на своей строке)

Terminal window
echo "${arr[@]}"

Все элементы (строка через пробел/IFS)

Terminal window
echo "${arr[*]}"

Добавить в конец

Terminal window
arr+=("new")

Изменить элемент

Terminal window
arr[1]="hello"

Удалить элемент

Terminal window
unset arr[1]

Примечание: в индексе будет пустота

Получить срез массива

Terminal window
echo "${arr[@]:1:2}"

Примечание: выведет 2 элемента, начиная с индекса 1

Замена во всех элементах

Terminal window
echo "${arr[@]//а/А}"
  • // — заменить все вхождения