2015-01-06 20 views
0

我正在嘗試使用getopts編寫一個簡短腳本。我希望它採用可選開關,或者只是默認運行。我有一個-d開關來啓用調試,我希望每一個其他的參數是一個路徑。理想的命令行看起來因爲如此,與路徑是可選的,理論上無限的:將getopts與無開關路徑一起使用

$0 [-d] [/path1[ /path2[ ...]]]

我目前使用getopts這樣如下:

while getopts ":d" opt; do 
    case $opt in 
     d) 
      DEBUG=true 
      ;; 
     h) 
      echo USAGE: $0 \[-d\] \[\/mount\/point\/1 ...\] 
      exit 0 
      ;; 
     \?) 
      echo Incorrect syntax 
      ;; 
    esac 
done 

我可以把什麼在while getopts節,並且在case集合中允許輸入路徑,數量儘可能多?

回答

2

你不需要循環中的任何東西或getopts調用。 getopts停在第一個非選項。

循環後,所有的路徑仍然在可用的位置參數。

另外,您的getopts字符串中沒有h,因此無效。

+0

所以我可以用標準循環遍歷它們......請問'getopts'也會刪除開關,所以我可以繼續使用'$ @'? –

+1

不,'getopts'不會刪除開關,但它確實將'OPTIND'設置爲第一個非選項參數。因此,通過'$ {@:$ OPTIND}'循環將工作和/或轉移$((OPTIND - 1))'將會將它們移開。 –

+0

工作正常!謝謝! –