Аргументы и параметры скрипта ($@, $#, getopts)
Научитесь передавать аргументы скриптам и разбирать параметры командной строки с помощью специальных переменных и «getopts».
«Аргументы и параметры скрипта ($@, $#, getopts)» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Аргументы сценария: зачем их использовать?
Вы когда-нибудь использовали команды вроде ls -l или cp file1 file2? Параметры -l, file1 и file2 — это аргументы! Они сообщают команде, что делать или над чем выполнять действие.
В сценариях Bash аргументы делают сценарии гибкими. Вместо жёстко заданных значений сценарий может принимать ввод непосредственно из командной строки при запуске.
Доступ к позиционным аргументам
При запуске сценария с аргументами Bash автоматически присваивает их специальным переменным, называемым позиционными параметрами.
- Первый аргумент —
$1. - Второй аргумент —
$2. - И так далее, вплоть до
$9.
Для аргументов с номерами больше 9 используются фигурные скобки, например ${10}, ${11} и т. д. Эти переменные содержат значения, переданные сценарию.
Демонстрация: позиционные аргументы
Посмотрим, как обращаться к этим аргументам в сценарии. Сохраните его под именем greet.sh и запустите с помощью команды ./greet.sh Alice Bob.
#!/bin/bash
echo "Hello, $1!"
echo "Welcome, $2."
echo "The third argument (if any) is: $3"`$0` и `$#`: сведения о сценарии
Bash предоставляет ещё несколько специальных переменных, содержащих сведения о самом сценарии и его аргументах:
$0: содержит имя выполняемого сценария. Это полезно для сообщений об ошибках или ведения журнала.$#: содержит общее количество позиционных аргументов, переданных сценарию.
С их помощью сценарии становятся более надёжными и удобными для пользователей.
Демонстрация: `$0` и `$#`
Запустите этот сценарий с разным количеством аргументов, например ./info.sh one two three или просто ./info.sh.
#!/bin/bash
echo "Script name: $0"
echo "Number of arguments received: $#"`$@` и `$*`: все аргументы
Иногда требуется обратиться ко всем аргументам сразу. Bash предлагает два способа:
$@: разворачивается в отдельные аргументы. При заключении в двойные кавычки ("$@") каждый аргумент остаётся отдельным словом, даже если содержит пробелы. Обычно этот вариант предпочтителен для циклов.$*: разворачивается в одну строку, содержащую все аргументы. При заключении в двойные кавычки ("$*") все аргументы объединяются в одно слово и разделяются первым символомIFS(внутренний разделитель полей, обычно пробелом).
При переборе аргументов всегда используйте "$@", чтобы сохранить пробелы!
Демонстрация: перебор с помощью `"$@"`
Этот сценарий демонстрирует, как "$@" правильно обрабатывает аргументы, содержащие пробелы. Запустите его так: ./loop_args.sh hello "world wide" web
#!/bin/bash
echo "Processing arguments with \"$@\":"
for arg in "$@"; do
echo " Argument: [$arg]"
done
echo "\nProcessing arguments with \"$*\":"
for arg in "$*"; do
echo " Argument: [$arg]"
doneПараметры: не только позиционные аргументы
Позиционные аргументы отлично подходят для простых случаев, но что делать, если сценарию нужны необязательные флаги или именованные параметры, например -v для подробного вывода или -f filename?
Здесь пригодятся параметры командной строки. Они делают сценарии более гибкими и удобными, позволяя пользователям задавать настройки в любом порядке.
В Bash специально для разбора таких параметров предусмотрена команда getopts.
Синтаксис `getopts`: `optstring`
Базовый синтаксис getopts: getopts optstring variable.
optstring: строка допустимых символов параметров. Если параметру нужен аргумент, например-f filename, после соответствующего символа ставится двоеточие (например,f:).variable: имя переменной, в которуюgetoptsсохранит обрабатываемый в данный момент символ параметра (например,opt).
Команда getopts также устанавливает OPTARG для аргументов параметров и OPTIND для индекса следующего аргумента.
Демонстрация: базовое использование `getopts`
Этот сценарий обрабатывает параметры -v (подробный вывод) и -f (файл). Попробуйте запустить его: ./options.sh -v -f mydata.txt -x или ./options.sh -vf mydata.txt
#!/bin/bash
while getopts "vf:" opt; do
case $opt in
v)
echo "Verbose mode enabled."
;;
f)
echo "File specified: $OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
doneБыстрая проверка: переменные аргументов
Рассмотрите следующий сценарий и способ его запуска:
#!/bin/bash
echo "Script: $0"
echo "Count: $#"
for arg in "$@"; do
echo "Arg: $arg"
doneЕсли запустить его так: ./myscript.sh "Hello World" 123
Каким будет вывод?
Повторение: аргументы и параметры
Отличная работа! Вы научились делать сценарии Bash гораздо более универсальными:
- Позиционные аргументы: используйте
$1,$2и т. д., чтобы напрямую обращаться к аргументам. - Специальные переменные:
$0содержит имя сценария,$#— количество аргументов, а"$@"позволяет безопасно перебирать все аргументы. - Параметры командной строки: используйте
getoptsдля разбора именованных параметров, например-v, и их аргументов, например-f filename, чтобы сделать сценарии более надёжными и удобными.
Практикуйтесь, используя эти возможности в собственных сценариях, чтобы создавать мощные и гибкие инструменты командной строки!
Часто задаваемые вопросы
Урок «Аргументы и параметры скрипта ($@, $#, getopts)» бесплатный?
Да — полный текст урока «Аргументы и параметры скрипта ($@, $#, getopts)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Аргументы и параметры скрипта ($@, $#, getopts)»?
Научитесь передавать аргументы скриптам и разбирать параметры командной строки с помощью специальных переменных и «getopts». Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Аргументы и параметры скрипта ($@, $#, getopts)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Циклические конструкции (for, while)
- Функции в скриптах Bash
- Аргументы и параметры скрипта ($@, $#, getopts)
- Оператор case и сопоставление с шаблонами