想我传递一个命令行参数,以我的shell脚本如下:如何获取命令行参数?
EX 1)./myshell_script ABCDEF
前2)./myshellscript fdebca
我的问题是,如果我想要得到总是在参数“b”之后的参数“c”[因为命令行参数可以以任何顺序提供],我怎样才能得到总是在参数“b”之后的值?
想我传递一个命令行参数,以我的shell脚本如下:如何获取命令行参数?
EX 1)./myshell_script ABCDEF
前2)./myshellscript fdebca
我的问题是,如果我想要得到总是在参数“b”之后的参数“c”[因为命令行参数可以以任何顺序提供],我怎样才能得到总是在参数“b”之后的值?
$ ./a.sh f d e b c a
c
代码
#!/bin/bash
i=
for p in [email protected]; do
if [ "$i" == "1" ];then
echo $p
exit
fi
if [ "$p" == "b" ];then
i=1
fi
done
Thanx farmer1992 – user2930942
getopts
这是很好的做法不依赖于参数的命令,而是将它们分配给使用getopts
明确的价值观。这允许你写东西./myshell_script -a a -b b -c c -d d -d e -f f
这相当于它的任何排列./myshellscript -f f -d d -e e -b b -c c -a a
。
无需担心订单,在脚本开头和额外字符的调用中值得一读。
Thanx Heisennberg !!! – user2930942
@ user2930942不要忘记接受答案;) –
myshellscript
#!/bin/bash
grep -oP 'b\s*\K[^ ]+' <<<$*
测试:
% myshellscript a b c d e f
c
% myshellscript f d e b c a
c
Thanx jkshah !!! – user2930942
@ user2930942欢迎!看来你是这个网站的新手。如果有任何ans正在为您工作,请考虑通过点击除了ans之外的空心绿色勾号来接受该答案。附:我注意到你没有接受任何4个问题的答案 – jkshah
如你所知,参数编号'$ 1','$ 2',等等。所以你应该找到b的位置并使用下一个参数。另外,你可以分析'$ *'参数列表。阅读'男人sh'的细节。 – taro