Командная оболочка и любые аргументы этой команды отображаются в виде нумерованных переменных оболочки: $0
имеет строковое значение самой команды, что - то вроде script
, ./script
, /home/user/bin/script
или любой другой . Любые аргументы появляются как "$1"
, "$2"
, "$3"
и так далее. Количество аргументов находится в переменной оболочки "$#"
.
Обычные способы борьбы с этим включают команды оболочки getopts
и shift
. getopts
очень похоже на getopt()
функцию библиотеки C. shift
перемещает значение $2
в $1
, $3
в $2
и т. д .; $#
уменьшается Код заканчивает тем, что смотрит на значение "$1"
, делает что-то, используя case
…, esac
чтобы принять решение о действии, а затем делает, shift
чтобы перейти $1
к следующему аргументу. Это только когда-либо нужно исследовать $1
, и, может быть $#
.
getopt()
является чрезвычайно установленным стандартом, ноgetopt
исполняемый файл не является одинаковым для всех дистрибутивов / платформ. Я теперь полностью преобразованныйgetopts
пользователь, так как это стандарт POSIX. Он также отлично работает сdash
моей предпочитаемой скриптовой оболочкойВы можете получить доступ к переданным аргументам с помощью
$n
гдеn
номер аргумента -1, 2, 3, ...
. Вы передаете аргументы так же, как и при использовании любой другой команды.источник
Вы также можете передать вывод одного сценария оболочки в качестве аргумента другому сценарию оболочки.
В сценарии оболочки вы можете получить доступ к аргументам с номерами, такими как
$1
первый аргумент,$2
второй аргумент и так далее.Подробнее об аргументах оболочки
источник
Форма
является наиболее удобным для
argv
. Разделитель аргументов является пробелом, но его можно изменить. Не помню, как с рук. Тогда используйтеконтролировать поток. Я обычно не принимаю getopts, если
case ... esac
будет достаточно.источник
В bash-скрипте мне лично нравится использовать следующий скрипт для установки параметров:
С этой структурой мы не полагаемся на порядок параметров, так как мы определяем ключевые буквы для каждого из них. Кроме того, функция справки будет напечатана всегда, когда параметры определены неправильно. Это очень полезно, когда у нас много сценариев с различными параметрами для обработки. Это работает следующим образом:
источник
myargument
становится$1
внутриmyscript
.источник
В сценарии оболочки; это становится именем переменной $ 1. Второе слово становится именем переменной $ 2 и так далее.
Более подробную информацию можно найти в руководстве по shell (sh) по адресу http://heirloom.sourceforge.net/sh/sh.1.html.
источник
Если вы знакомы с Python argparse и не против вызвать python для разбора аргументов bash, используйте bash argparse ( https://github.com/mattbryson/bash-arg-parse ),
См. Тот же ответ здесь: https://stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash-script/50181287#50181287
источник
источник
2> /dev/null
, 2) ничего не добавляет к существующим ответам.