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

Функции в скриптах Bash

Организуйте код с помощью функций, повышая его повторное использование и делая скрипты более понятными и удобными в сопровождении.

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

Что такое функции Bash?

В сценариях Bash функция — это блок кода, выполняющий определённую задачу. Представьте её как небольшой сценарий внутри основного сценария.

Функции помогают:

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

Определение простой функции

В Bash есть два распространённых способа определить функцию. Оба дают один и тот же результат. Чаще всего используется первый синтаксис.

Попробуйте запустить этот пример. Он определяет функции, но пока ещё не вызывает их!

#!/bin/bash

# Method 1: The most common way
my_first_func () {
  echo "Hello from my_first_func!"
}

# Method 2: Using the 'function' keyword
function my_second_func {
  echo "Hello from my_second_func!"
}

echo "Functions defined, but not called."

Вызов функций

Определение функции не приводит к её выполнению. Чтобы запустить код внутри функции, достаточно вызвать её по имени, как любую другую команду.

Посмотрите, как после определения вызывается my_function:

#!/bin/bash

my_function () {
  echo "This message is from inside the function."
}

echo "Script started."
my_function # Call the function here
echo "Script finished."

Локальные переменные в функциях

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

Чтобы избежать непреднамеренных побочных эффектов и сохранить функции изолированными, используйте ключевое слово local, объявляя переменную локальной. Локальные переменные существуют только внутри этой функции.

#!/bin/bash

global_message="I'm a global message"

my_function () {
  local func_message="I'm a local message"
  global_message="I've been changed by the function!"
  echo "Inside func: $func_message"
  echo "Inside func: $global_message"
}

echo "Before func: $global_message"
my_function
echo "After func: $global_message"
echo "After func: $func_message (This will be empty)"

Передача аргументов функциям

В функции можно передавать информацию с помощью аргументов, как и обычным командам оболочки. Внутри функции к этим аргументам обращаются через специальные переменные:

  • $1, $2, $3...: отдельные аргументы
  • $#: общее количество аргументов
  • $@: все аргументы в виде отдельных строк
#!/bin/bash

greet_user () {
  echo "Hello, $1!"
  echo "You are $2 years old."
  echo "Total arguments received: $#"
  echo "All arguments: $@"
}

echo "Calling greet_user with two arguments:"
greet_user "Alice" 30

echo "\nCalling greet_user with one argument:"
greet_user "Bob"

Код состояния завершения функции (возврат)

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

Для установки этого кода состояния используется ключевое слово return. Затем его можно проверить с помощью специальной переменной $? сразу после вызова функции.

#!/bin/bash

check_age () {
  local age=$1
  if [ "$age" -ge 18 ]; then
    return 0 # Success: 18 or older
  else
    return 1 # Failure: under 18
  fi
}

check_age 25
echo "Exit status for 25: $?"

check_age 16
echo "Exit status for 16: $?"

if check_age 20; then
  echo "User is an adult."
else
  echo "User is a minor."
fi

Получение вывода функции

Команда return передаёт код состояния завершения. Если же функция должна вернуть «значение», которое можно сохранить в переменной, ей следует вывести это значение в стандартный вывод с помощью echo.

Затем этот вывод можно получить с помощью подстановки команды, заключив вызов функции в $(...).

#!/bin/bash

get_full_name () {
  local first_name=$1
  local last_name=$2
  echo "$first_name $last_name" # Echo the full name
}

name="$(get_full_name "John" "Doe")"

echo "Full name captured: $name"

calculate_area () {
  local length=$1
  local width=$2
  echo $((length * width))
}

area=$(calculate_area 10 5)
echo "Calculated area: $area"

Практический пример: ведение журнала

Рассмотрим практический пример повторно используемой функции — простого средства ведения журнала. Эту функцию можно вызывать в любом месте сценария, чтобы выводить сообщения с отметкой времени и упростить отладку и отслеживание работы.

#!/bin/bash

log_message () {
  local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
  local message="$1"
  echo "[$timestamp] $message"
}

log_message "Script execution started."
sleep 1 # Simulate some work
log_message "Processing user data..."
sleep 1
log_message "Operation completed successfully."

Рекомендации по работе с функциями

Чтобы писать понятные и удобные для сопровождения сценарии с функциями, воспользуйтесь следующими рекомендациями:

  • Сохраняйте простоту: каждая функция должна хорошо выполнять одну задачу.
  • Выбирайте понятные имена: используйте описательные имена, например validate_input или create_backup.
  • Используйте local: всегда объявляйте переменные внутри функций с помощью local, чтобы избежать конфликтов.
  • Добавляйте комментарии: объясняйте, что делает функция, какие у неё аргументы и что она возвращает.
  • Проверяйте ввод: если функция ожидает определённые аргументы, проверяйте их.

Проверка аргументов функции

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

Функции: повторение и следующие шаги

Отличная работа! Вы освоили функции Bash.

Мы рассмотрели:

  • определение и вызов функций;
  • использование local для ограничения области видимости переменных;
  • передачу аргументов с помощью $1, $#, $@;
  • установку кода состояния завершения с помощью return;
  • получение вывода с помощью echo и подстановки команды.

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

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

Урок «Функции в скриптах Bash» бесплатный?

Да — полный текст урока «Функции в скриптах Bash» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Функции в скриптах Bash»?

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

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

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

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

  1. Циклические конструкции (for, while)
  2. Функции в скриптах Bash
  3. Аргументы и параметры скрипта ($@, $#, getopts)
  4. Оператор case и сопоставление с шаблонами
← Назад к Linux Command Line & Bash Scripting Mastery