2013-11-01 112 views
0

想我传递一个命令行参数,以我的shell脚本如下:如何获取命令行参数?

EX 1)./myshell_script ABCDEF

前2)./myshellscript fdebca

我的问题是,如果我想要得到总是在参数“b”之后的参数“c”[因为命令行参数可以以任何顺序提供],我怎样才能得到总是在参数“b”之后的值?

+1

如你所知,参数编号'$ 1','$ 2',等等。所以你应该找到b的位置并使用下一个参数。另外,你可以分析'$ *'参数列表。阅读'男人sh'的细节。 – taro

回答

1
$ ./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 
+0

Thanx farmer1992 – user2930942

0

使用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

无需担心订单,在脚本开头和额外字符的调用中值得一读。

+0

Thanx Heisennberg !!! – user2930942

+0

@ user2930942不要忘记接受答案;) –

0

myshellscript

#!/bin/bash 
grep -oP 'b\s*\K[^ ]+' <<<$* 

测试:

% myshellscript a b c d e f 
c 
% myshellscript f d e b c a 
c 
+0

Thanx jkshah !!! – user2930942

+0

@ user2930942欢迎!看来你是这个网站的新手。如果有任何ans正在为您工作,请考虑通过点击除了ans之外的空心绿色勾号来接受该答案。附:我注意到你没有接受任何4个问题的答案 – jkshah