bash скрипты для начинающих — урок №11: Как передать аргументы скрипту.

Предыдущий урок: bash скрипты для начинающих — урок №10: Функции.

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

Зачем нужны аргументы?

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

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

Упрощение автоматизации: Скрипты могут обрабатывать разные входные данные без необходимости изменять сам код — достаточно передать нужные аргументы при запуске.

Как передать аргументы скрипту

Создадим новый файл для сегодняшнего урока:

[root@waky bash_practice]# touch script_11.sh
[root@waky bash_practice]# chmod +x script_11.sh
[root@waky bash_practice]#

Шаг 1: Передаем аргументы без проверки

Заполним файл script_11.sh следующим содержанием:

#!/bin/bash

echo "Your argument is: $1"

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

[root@waky bash_practice]# ./script_11.sh test
Your argument is: test
[root@waky bash_practice]#

Если мы хотим принять несколько аргументов, достаточно просто прописать их порядковые номера в скрипте:

#!/bin/bash

first_arg=$1
second_arg=$2
third_arg=$3

echo "Your first argument is: $first_arg"
echo "Your second argument is: $second_arg"
echo "Your third argument is: $third_arg"

Попробуем ввести аргументов меньше, чем требуется:

[root@waky bash_practice]# ./script_11.sh Holmes Watson
Your first argument is: Holmes
Your second argument is: Watson
Your third argument is:
[root@waky bash_practice]#

Или больше:

[root@waky bash_practice]# ./script_11.sh Athos Porthos Aramis DArtagnan
Your first argument is: Athos
Your second argument is: Porthos
Your third argument is: Aramis
[root@waky bash_practice]#

Как видим, скрипт будет работать в любом случае, только в первом случае у него будет отсутствовать одно значение, а во втором случае будут отброшены все аргументы сверх необходимых.

Шаг 2: Проверяем аргументы

Наличие и количество аргументов может не быть критичным, если в вашем скрипте предусмотрены значения по умолчанию на случай отсутствия аргумента. В противном случае, стоит убедиться, что скрипт получит ровно столько аргументов, сколько требуется.

Поправим наш скрипт следующим образом:

#!/bin/bash

if [ $# -ne 3 ]; then
    echo "The script requeres exactly 3 arguments."
    echo "But you provided $#"
    exit 1
else
    first_arg=$1
    second_arg=$2
    third_arg=$3
fi

echo "Your first argument is: $first_arg"
echo "Your second argument is: $second_arg"
echo "Your third argument is: $third_arg"

Перезапустим скрипт и проверим результат:

[root@waky bash_practice]# ./script_11.sh Athos Porthos Aramis DArtagnan
The script requeres exactly 3 arguments.
But you provided 4
[root@waky bash_practice]#

$# — обозначает количество аргументов, и если их число не равно 3, скрипт выводит предупреждение и возвращает код выхода с ошибкой (exit 1).

Если мы дадим правильное количество аргументов, скрипт отработает, как положено:

[root@waky bash_practice]# ./script_11.sh Athos Porthos Aramis
Your first argument is: Athos
Your second argument is: Porthos
Your third argument is: Aramis
[root@waky bash_practice]#

Итоги:

Сегодня мы научились использовать аргументы в скриптах. Узнали, как с их помощью передать значение в скрипт и как контролировать количество передаваемых аргументов. Использование аргументов делает скрипт более гибким и универсальным.

Следующий урок: bash скрипты для начинающих — урок №12: Оператор case.