Как я могу передать параметр командной строки в сценарий оболочки?

Смотрит на меня как команда test "$?" != "0" заканчивает тем, что установил $? к 1. $ значения? привыкает в аргументах test. test $ наборов? к ненулевому значению, потому что "0" лексически равно "0"."! =", делает test возвратитесь ненулевой.

271
10.02.2012, 23:16
7 ответов

Команда оболочки и любые аргументы той команде появляются как пронумерованные переменные оболочки: $0 имеет строковое значение самой команды, чего-то как script, ./script, /home/user/bin/script или что бы то ни было. Любые аргументы появляются как "$1", "$2", "$3" и так далее. Количество аргументов находится в переменной оболочки "$#".

Распространенные способы иметь дело с этим включают команды оболочки getopts и shift. getopts много похож на C getopt() библиотечная функция. shift перемещает значение $2 кому: $1, $3 кому: $2, и так далее; $# постепенно уменьшается. Код заканчивает тем, что смотрел на значение "$1", выполнение вещей с помощью a caseesac выбрать действие и затем выполнение a shift перемещаться $1 к следующему аргументу. Это только когда-либо должно исследовать $1, и возможно $#.

213
27.01.2020, 19:26
  • 1
    C getopt() чрезвычайно установленный стандарт, но getopt исполняемый файл не является тем же через дистрибутив/платформу. Я теперь полностью преобразован getopts пользователь, поскольку это - стандарт POSIX. Это работает отлично с dash также, который является моей предпочтительной оболочкой сценария –  J. M. Becker 11.02.2012, 01:40

Можно получить доступ к передаваемым аргументам с $n где n число аргумента - 1, 2, 3, .... Вы передаете аргументы точно так же, как Вы были бы с любой другой командой.

$ cat myscript
#!/bin/bash
echo "First arg: $1"
echo "Second arg: $2"
$ ./myscript hello world
First arg: hello
Second arg: world
193
27.01.2020, 19:26
./myscript myargument

myargument становится $1 внутри myscript.

14
27.01.2020, 19:26
$/shellscriptname.sh argument1 argument2 argument3 

Можно также передать вывод одного сценария оболочки как аргумент другому сценарию оболочки.

$/shellscriptname.sh "$(secondshellscriptname.sh)"

В рамках сценария оболочки можно получить доступ к спорам с числами как $1 для первого аргумента и $2 для второго аргумента и так далее так дальше.

Больше на аргументах оболочки

28
27.01.2020, 19:26

Форма

$ ./script.sh "$@" 

наиболее удобна для argv. Разделителем аргументов является пробел, но его можно изменить. Не помню, как именно. Затем используйте

 $1, $2, shift, if [ $# -ne 3 ] 

для управления потоком. Я обычно не использую getopts, если достаточно case ... esac.

31
20.08.2021, 13:29

В сценарии оболочки ; оно становится именем переменной $1. Второе слово становится именем переменной $2 и так далее.

cat << 'EOF' > test
echo "First arg: $1"
echo "Second arg: $2"
echo "List of all arg: $@"
EOF
sh test hello world

Дополнительные сведения можно найти в руководстве по (sh )по адресуhttp://heirloom.sourceforge.net/sh/sh.1.html

10
20.08.2021, 13:29

Следующее мое:

#!/bin/bash 
echo 'First arg:' $1 
echo 'Second arg:' $2 

Имя оболочки — para _script.sh

Затем выполните :./para_script.sh hello world

2
20.08.2021, 13:29

Теги

Похожие вопросы