0Pricing
DevOps Bootcamp · Урок

Аргументы и параметры скрипта ($@, $#, 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 — локальная установка не требуется.

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

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