0Pricing
Linux Command Line & Bash Scripting Mastery · Урок

Функции оболочки и повторно используемые фрагменты

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

«Функции оболочки и повторно используемые фрагменты» — бесплатный урок Linux Command Line & Bash Scripting Mastery на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Linux Command Line & Bash Scripting Mastery, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Linux Command Line & Bash Scripting Mastery содержит 4 уроков всего.

Зачем нужны функции оболочки

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

  • Быстрее, чем копирование и вставка команд
  • Аккуратнее, чем длинные псевдонимы
  • Может принимать аргументы, в отличие от псевдонимов
mkcd() {
  mkdir -p "$1" && cd "$1"
}

Определение функции

Простейшая форма использует синтаксис name() { ... }. Команды внутри фигурных скобок выполняются при вызове функции по имени.

greet() {
  echo "Hello from a function"
}
greet

Аргументы функции

Функции получают позиционные параметры так же, как сценарии: $1, $2. $# — это количество аргументов, а $@ раскрывается во все аргументы.

backup() {
  cp "$1" "$1.bak"
  echo "Backed up $1"
}
backup notes.txt

Возвращаемые значения и статус завершения

Функции возвращают статус завершения через return N (0–255). Используйте его для проверки успеха или ошибки, а не для возврата данных.

is_root() {
  [ "$(id -u)" -eq 0 ] && return 0 || return 1
}
if is_root; then echo root; else echo normal; fi

Возврат вывода через echo

Поскольку return передаёт только код статуса, настоящий вывод печатается и перехватывается с помощью $( ).

timestamp() {
  date +%Y%m%d-%H%M%S
}
name="log-$(timestamp).txt"
echo "$name"

Локальные переменные

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

count_lines() {
  local n
  n=$(wc -l < "$1")
  echo "$1 has $n lines"
}

Значения аргументов по умолчанию

Используйте раскрытие параметра ${1:-default}, чтобы подставить значение по умолчанию, если аргумент отсутствует.

say() {
  local msg="${1:-Hello World}"
  echo "$msg"
}
say
say "Custom message"

Функции и псевдонимы

Псевдонимы просто подставляют текст и не умеют корректно принимать позиционные аргументы. Функции могут выполнять ветвление, циклы и обрабатывать входные данные.

  • Используйте псевдоним для фиксированного сокращения
  • Используйте функцию, когда Вам нужны логика или аргументы
alias ll='ls -la'
lt() { ls -la "${1:-.}" | tail -n "${2:-5}"; }

Сохранение функций

Функции, определённые в командной строке, исчезают после завершения работы оболочки. Добавьте их в ~/.bashrc, чтобы они были доступны в каждом сеансе.

# Append to ~/.bashrc
extract() {
  case "$1" in
    *.tar.gz) tar xzf "$1" ;;
    *.zip)    unzip "$1" ;;
    *)        echo "Unknown format" ;;
  esac
}

Просмотр и удаление функций

declare -F выводит имена функций, а declare -f name показывает тело функции. Удалите функцию с помощью unset -f name.

declare -F
declare -f greet
unset -f greet

Объединение функций

Функции могут вызывать другие функции, благодаря чему небольшие повторно используемые компоненты объединяются в более крупные инструменты.

log() { echo "[$(date +%T)] $*"; }
deploy() {
  log "Starting deploy"
  log "Done"
}
deploy

Быстрая проверка

Проверьте, насколько хорошо Вы поняли функции оболочки.

Итоги

Вы научились создавать повторно используемые функции оболочки:

  • Определяйте их с помощью name() { ... } и вызывайте по имени
  • Используйте $1, $@, $# для аргументов, а return — для возврата статуса
  • Ограничивайте область видимости переменных с помощью local, возвращайте данные через echo
  • Сохраняйте их в ~/.bashrc и просматривайте с помощью declare -f

Часто задаваемые вопросы

Урок «Функции оболочки и повторно используемые фрагменты» бесплатный?

Да — полный текст урока «Функции оболочки и повторно используемые фрагменты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Linux Command Line & Bash Scripting Mastery, подпишись на CoddyKit PRO. Курс Linux Command Line & Bash Scripting Mastery содержит 4 уроков всего.

Чему я научусь в уроке «Функции оболочки и повторно используемые фрагменты»?

Определяйте и используйте функции Bash, чтобы объединять команды в повторно используемые блоки с параметрами для вашей оболочки. Ты практикуешь Linux Command Line & Bash Scripting Mastery с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Linux Command Line & Bash Scripting Mastery?

Предыдущий опыт не требуется. Linux Command Line & Bash Scripting Mastery на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Функции оболочки и повторно используемые фрагменты»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Linux Command Line & Bash Scripting Mastery?

Да. Каждый урок Linux Command Line & Bash Scripting Mastery включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Управление заданиями (bg, fg, jobs)
  2. Подстановка и раскрытие шаблонов в оболочке
  3. Псевдонимы и пользовательские приглашения
  4. Функции оболочки и повторно используемые фрагменты
← Назад к Linux Command Line & Bash Scripting Mastery