2014-02-26 59 views
1

我有一個shell腳本,我在解析命令行參數。我的論據中有道路。 例如:mycript.sh -c test -s global -n /mydir/test1 -d /orgdir/test35 當我運行腳本並回顯包含路徑的參數(特殊字符「/」)時,它給了我空路徑。這個回聲在shell腳本中的命令行解析

#/!bin/bash 
... 

while getopts c:hs:n:d opt 
do 
case "$opt" in 
c) INST=$OPTARG;; 
d) INST_DIR=$OPTARG;; 
h) usage;; 
s) METHOD=$OPTARG;; 
n) MAINTENANCE_DIR=$OPTARG;; 
\?) usage;; 
esac 
done 

echo INST dir is [$INST_DIR] 
echo MAINTENANCE dir is [$MAINTENANCE_DIR] 
....... 

結果是

INST dir is [] 
MAINTENANCE dir is [] 

誰能告訴我,什麼是不正確嗎?

+0

它不是你的問題的直接解決方案,但我建議你看看[docopt](https://github.com/docopt/docopts)這是一個可移植的(跨語言)的方式來解析參數。 – zmo

+0

儘管docopt仍然是第三方解決方案。 'getopts'是'bash'的一部分,因此完全可移植(無論如何,假設'bash'可用)。 – chepner

回答

2

隨着你的腳本,我有一個不同的結果:

INST dir is [] 
MAINTENANCE dir is [/mydir/test1] 

我已經改變了4行的腳本是這樣的:

while getopts c:h:s:n:d: opt 

它工作正常,我在Cygwin下,與bash版本4.1.10(4)-release。

+0

+1同樣在這裏。原始文件中唯一明顯的問題是在選項列表中缺少*'d'之後的':'*。 – chepner