2015-06-21 195 views
0

我正在使用bash腳本,並決定使用getopts來獲取選項,但我使用的循環不起作用!有人可以幫我嗎?Getopts循環無法正常工作

while getopts "u:p:k:s:t:c:l:" flag 
do 
    echo $flag 
    case "$flag" in 
     k) APIKEY="$OPTARG" 
      ;; 
     s) APISECRET="$OPTARG" 
      ;; 
     u) USERNAME="$OPTARG" 
      ;; 
     p) PASSWORD="$OPTARG" 
      ;; 
     t) TITLE="$OPTARG" 
      ;; 
     c) CATEGORY="$OPTARG" 
      ;; 
     l) LANGUAGE="$OPTARG" 
      ;; 
esac 
done 
shift $((OPTIND-1)) 

沒有設置上述變量。

+0

如何驗證變量是否已設置?當我添加'echo $ CATEGORY'並運行'sample.sh -c Test'時,它輸出'Test'。 – choroba

+0

在我的腳本中它不起作用。 https://github.com/danog/DailyMotionUpload/raw/master/dmUpload.sh – Danogentili

+1

你如何傳遞你的論點?給我們命令行示例 – Samuel

回答

1

請勿使用=getopts和短期選項。另外,如果你想提供「非選擇」,例如文件名(在你的情況下爲video.mp4),它們應該在最後,而不是在選項之前(並且你必須相應地改變代碼);或者您可以在開始選項循環之前處理它們(和shift)。

dmUpload.sh -u USERNAME -p PASS -k KEY -s SECRET -c CAT -t TILE -l LANG video.mp4 
+0

看來OP想使用位置參數作爲可選的標籤列表。然後,你應該將第一個選項保存爲'infile'並在'getopts'處理之前執行'shift'。 – leesei

+0

謝謝,它現在可行! – Danogentili