想我傳遞一個命令行參數,以我的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