Передача аргументов является самым простым из двух (см «What are special dollar sign shell variables?» на SO):
#!/bin/sh
echo "$#"; # total number of arguments
echo "$0"; # name of the shell script
echo "$1"; # first argument
Предполагая, что файл с именем «вещи» (без УДЛИНИТЕЛЯ) и результат выполнения ./stuff hello world
:
3
stuff
hello
Передача однобуквенных переключателей (с необязательными связанными параметрами), например ./stuff -v -s hello
вы хотите использовать getopts
. См. «How do you use getopts» на SO и this great tutorial.Вот пример:
#!/bin/sh
verbose=1
string=
while getopts ":vs:" OPT; do
case "$OPT" in
v) verbose=0;;
s) string="$OPTARG";;
esac;
done;
if verbose; then
echo "verbose is on";
fi;
echo "$string";
Линия, имеющий getopts
в сочетании с while
требует дальнейшего объяснения:
while
- запустить время цикла, пройдя через все getopts
возвращается назад после того, как он обрабатывает
getopts :vs: OPT;
- программа getopts
с 2 аргументами :vs:
и OPT
getopts
- возвращает что-то while
может перебрать
:vs:
- первый аргумент, это описывает то, что переключатели getopts
будут искать, пока он разбирает линию SHELL
:
- первое двоеточие берет getopts
из режима отладки , пропустите это, чтобы сделать getopts
verbose
v
- найти переключатель -v
, после этого не будет аргументации, просто переключатель
s:
- найти вариант -s
с аргументом после того, как
OPT
- будет хранить символ, используемый (имя коммутатора), например, "V" или "s"
OPTARG
- переменная для загрузки значения в течение каждого из итераций while
«s. Для v
, $OPTARG
не будет иметь значения, но для s
он будет.
Двоеточие :
сообщает getopts искать аргумент после переключения. Единственное исключение состоит в том, что последовательность символов начинается с :
, затем она переключает getopts
в/из режима отладки/добавления. Например:
getopts :q:r:stu:v
будет принимать getopts из режима отладки, покажет это, что переключатели q
, r
и u
воли ожидает арг, в то время как s
, t
и u
не будут. Это было бы применимо к чему-то вроде: stuff -q hello -r world -s -t -u 123 -v
getopts tuv
только сказать getopts искать выключатели t
u
, и v
без аргументов, например stuff -t -u -v
, и быть подробным
[Обязательная ссылка.] (Http://tldp.org/LDP/abs/html/). Ваш вопрос слишком широк, и любой ответ, вероятно, будет выше вашего уровня знаний. Я бы посоветовал вам узнать, по крайней мере, основы сценариев оболочки или просто сделать '$ git clone git: // ...' как каждый пользователь Git-lovin 'Pathogen. – romainl
@romainl Я проверю эту ссылку, я не знал об этом, хотя я и делал Google для этого. Благодаря! – greduan