Ответ
Функция в Bash возвращает целочисленный код завершения (exit status) от 0 до 255. По соглашению, 0 означает успех, любое ненулевое значение — ошибку.
Ключевые моменты:
- Возвращаемое значение — это статус, а не данные. Для передачи данных используется стандартный вывод (stdout).
- Если не указать
returnявно, функция вернет код последней выполненной команды.
Примеры из скриптов автоматизации:
#!/bin/bash
# 1. Функция проверяет, запущен ли процесс, и возвращает статус
is_process_running() {
local process_name="$1"
pgrep -f "$process_name" > /dev/null 2>&1
# Возвращается код выполнения pgrep (0 если процесс найден)
return $?
}
if is_process_running "nginx"; then
echo "Nginx is running."
else
echo "Nginx is NOT running. Starting..."
systemctl start nginx
fi
# 2. Функция с явным возвратом кода ошибки
validate_config() {
local config_file="$1"
if [[ ! -f "$config_file" ]]; then
echo "Config file not found!" >&2
return 1 # Возвращаем код ошибки
fi
# Проверка синтаксиса, например, для JSON
if ! jq empty "$config_file" 2>/dev/null; then
echo "Invalid JSON in config!" >&2
return 2 # Другой код ошибки
fi
return 0 # Явный возврат успеха
}
validate_config "/etc/app/config.json"
case $? in
0) echo "Config is valid." ;;
1) echo "Error: File missing." ;;
2) echo "Error: Invalid syntax." ;;
esac
В DevOps-скриптах такая логика используется для принятия решений в CI/CD пайплайнах (продолжить/прервать деплой) или в скриптах мониторинга.