Смотрит на меня как команда test "$?" != "0"
заканчивает тем, что установил $? к 1. $ значения? привыкает в аргументах test
. test
$ наборов? к ненулевому значению, потому что "0" лексически равно "0"."! =", делает test
возвратитесь ненулевой.
Команда оболочки и любые аргументы той команде появляются как пронумерованные переменные оболочки: $0
имеет строковое значение самой команды, чего-то как script
, ./script
, /home/user/bin/script
или что бы то ни было. Любые аргументы появляются как "$1"
, "$2"
, "$3"
и так далее. Количество аргументов находится в переменной оболочки "$#"
.
Распространенные способы иметь дело с этим включают команды оболочки getopts
и shift
. getopts
много похож на C getopt()
библиотечная функция. shift
перемещает значение $2
кому: $1
, $3
кому: $2
, и так далее; $#
постепенно уменьшается. Код заканчивает тем, что смотрел на значение "$1"
, выполнение вещей с помощью a case
…esac
выбрать действие и затем выполнение a shift
перемещаться $1
к следующему аргументу. Это только когда-либо должно исследовать $1
, и возможно $#
.
Можно получить доступ к передаваемым аргументам с $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
$/shellscriptname.sh argument1 argument2 argument3
Можно также передать вывод одного сценария оболочки как аргумент другому сценарию оболочки.
$/shellscriptname.sh "$(secondshellscriptname.sh)"
В рамках сценария оболочки можно получить доступ к спорам с числами как $1
для первого аргумента и $2
для второго аргумента и так далее так дальше.
Форма
$ ./script.sh "$@"
наиболее удобна для argv
. Разделителем аргументов является пробел, но его можно изменить. Не помню, как именно. Затем используйте
$1, $2, shift, if [ $# -ne 3 ]
для управления потоком. Я обычно не использую getopts, если достаточно case ... esac
.
В сценарии оболочки ; оно становится именем переменной $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
Следующее мое:
#!/bin/bash
echo 'First arg:' $1
echo 'Second arg:' $2
Имя оболочки — para _script.sh
Затем выполните :./para_script.sh hello world
getopt()
чрезвычайно установленный стандарт, ноgetopt
исполняемый файл не является тем же через дистрибутив/платформу. Я теперь полностью преобразованgetopts
пользователь, поскольку это - стандарт POSIX. Это работает отлично сdash
также, который является моей предпочтительной оболочкой сценария – J. M. Becker 11.02.2012, 01:40