Bash:
Чтение аргументов командной строки
Как это сделать:
#!/bin/bash
# Вывести имя скрипта.
echo "Имя скрипта: $0"
# Вывести первый аргумент.
echo "Первый аргумент: $1"
# Вывести все аргументы.
echo "Все аргументы: $@"
Пример вывода, предполагая, что ваш скрипт назван ’example.sh’ и вы вызвали ./example.sh arg1 arg2
:
Имя скрипта: ./example.sh
Первый аргумент: arg1
Все аргументы: arg1 arg2
Цикл по аргументам:
#!/bin/bash
# Цикл по каждому аргументу.
for arg in "$@"; do
echo "Аргумент: $arg"
done
Подробнее
Bash поддерживает аргументы командной строки уже давно; это позиционные параметры, $0
до $9
, с $@
и $*
, показывающими все. $0
это сам скрипт, $1
до $9
это первый до девятого аргумента; для десятого и дальше нужны скобки, например ${10}
.
Использование $@
обычно лучше, чем $*
, поскольку оно корректно обрабатывает аргументы, содержащие пробелы. $@
выдает каждый аргумент как отдельное “слово”; $*
объединяет их все в одно “слово”.
Вы можете пролистывать аргументы с помощью команды shift
, которая перемещает $2
на место $1
, и так далее, отбрасывая старый $1
.
Альтернативы? Конечно. getopts
и getopt
предоставляют больше контроля за опциями (например, -h для помощи) и разбором флагов; проверьте их, если $1
, $2
,… вам не подходят.
Смотрите также
- Руководство по Bash о специальных параметрах: https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html
- Расширенное руководство по написанию скриптов на Bash: https://www.tldp.org/LDP/abs/html/
- Учебник по
getopts
: https://wiki.bash-hackers.org/howto/getopts_tutorial