Функции, аргументы и повторно используемые скрипты
Сделайте скрипты Bash модульными и удобными для сопровождения: определяйте функции, передавайте и проверяйте аргументы командной строки, возвращайте значения и создавайте скрипты, которые можно повторно использовать в разных задачах автоматизации сервера.
«Функции, аргументы и повторно используемые скрипты» — бесплатный урок Linux Server Deployment & SSH Mastery на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Linux Server Deployment & SSH Mastery, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Linux Server Deployment & SSH Mastery содержит 4 уроков всего.
От сценариев к инструментам
Вы умеете писать сценарии, автоматизировать задачи и обрабатывать ошибки. Следующий шаг — сделать сценарии повторно используемыми: организовать код в функции, принимающие аргументы, чтобы один сценарий подходил для разных ситуаций.
Так одноразовые сценарии превращаются в полноценные инструменты администратора.
Определение функции
Функция Bash объединяет команды под одним именем. Определите её один раз и вызывайте многократно. Тело функции помещается между фигурными скобками.
greet() {
echo 'Hello from the function!'
}
greetПередача аргументов функциям
Функции получают аргументы позиционно: $1, $2 и так далее. $@ содержит все аргументы, а $# — их количество.
greet() {
echo "Hello, $1! You are $2 years old."
}
greet Alice 30Аргументы на уровне сценария
Те же позиционные переменные работают для всего сценария. Запустите ./deploy.sh staging v2, и сценарий прочитает $1 как «staging», а $2 как «v2».
#!/bin/bash
ENV=$1
VERSION=$2
echo "Deploying $VERSION to $ENV"Проверка аргументов
Надёжные инструменты проверяют входные данные. Убедитесь, что количество аргументов соответствует ожидаемому, и завершите работу с сообщением об использовании, если аргументы отсутствуют.
if [ $# -lt 2 ]; then
echo "Usage: $0 <env> <version>"
exit 1
fiВозврат статуса из функций
Функции возвращают статус выхода с помощью return (0 = успех). Вызывающий код проверяет его с помощью $? или непосредственно в if.
is_root() {
[ "$(id -u)" -eq 0 ]
}
if is_root; then echo 'root'; else echo 'not root'; fiВозврат данных из функций
Чтобы вернуть фактические данные, а не только статус, выведите их с помощью echo и перехватите результат подстановкой команды. Вызывающий код присваивает результат переменной.
timestamp() {
date +%Y%m%d_%H%M%S
}
NOW=$(timestamp)
echo "Backup name: backup_$NOW"Локальные переменные
По умолчанию переменные Bash являются глобальными, что вызывает ошибки при работе разных функций. Объявляйте переменные, используемые внутри функции, с помощью local, чтобы изолировать их.
add() {
local result=$(( $1 + $2 ))
echo $result
}
echo "Sum: $(add 3 4)"Значения по умолчанию и именованные флаги
Задавайте разумные значения по умолчанию с помощью раскрытия параметров и разбирайте флаги, чтобы сделать инструменты удобнее.
${1:-default}— использовать «default», если$1не заданаgetopts— разбирать флаги в стиле-v,-f file
ENV=${1:-staging}
echo "Target environment: $ENV"Подключение библиотеки функций
Поместите общие функции в отдельный файл и подключайте его с помощью source из нескольких сценариев. Это избавляет от необходимости копировать вспомогательные функции повсюду.
# in lib.sh: define log(), is_root(), etc.
source ./lib.sh
log 'Starting deployment'Рекомендации
Пишите сценарии, удобные для сопровождения:
- Разбивайте логику на небольшие функции с понятными именами
- Всегда проверяйте аргументы и выводите сообщение об использовании
- Используйте
localдля переменных функций - Подключайте вспомогательные функции через файл библиотеки
Быстрая проверка
Проверьте свои знания о функциях Bash.
Итоги
Теперь Вы умеете создавать повторно используемые инструменты Bash:
- Определять функции и многократно вызывать их
- Передавать и проверять аргументы (
$1,$@,$#) - Возвращать статус с помощью
return, а данные — черезechoи подстановку команды - Использовать переменные
localи общие библиотеки, подключаемые с помощьюsource
Эти приёмы превращают одноразовые сценарии в удобный для сопровождения набор инструментов автоматизации.
Часто задаваемые вопросы
Урок «Функции, аргументы и повторно используемые скрипты» бесплатный?
Да — полный текст урока «Функции, аргументы и повторно используемые скрипты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Linux Server Deployment & SSH Mastery, подпишись на CoddyKit PRO. Курс Linux Server Deployment & SSH Mastery содержит 4 уроков всего.
Чему я научусь в уроке «Функции, аргументы и повторно используемые скрипты»?
Сделайте скрипты Bash модульными и удобными для сопровождения: определяйте функции, передавайте и проверяйте аргументы командной строки, возвращайте значения и создавайте скрипты, которые можно повто… Ты практикуешь Linux Server Deployment & SSH Mastery с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Linux Server Deployment & SSH Mastery?
Предыдущий опыт не требуется. Linux Server Deployment & SSH Mastery на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Функции, аргументы и повторно используемые скрипты»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Linux Server Deployment & SSH Mastery?
Да. Каждый урок Linux Server Deployment & SSH Mastery включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Введение в написание сценариев Bash
- Автоматизация задач сервера
- Обработка ошибок и ведение журналов в сценариях
- Функции, аргументы и повторно используемые скрипты