Функции оболочки и повторно используемые фрагменты
Определяйте и используйте функции 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 — локальная установка не требуется.
Все уроки этого курса
- Управление заданиями (bg, fg, jobs)
- Подстановка и раскрытие шаблонов в оболочке
- Псевдонимы и пользовательские приглашения
- Функции оболочки и повторно используемые фрагменты