2013-11-01 143 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