2015-04-07 31 views
0

我試圖檢查兩個標誌之一是否存在。 -c-v使用getopts的Bash不會返回預期的回顯值

但是,在嘗試運行下面的代碼時,我發現腳本退出時沒有輸出任何內容。

我看過在while getopts 「:v:」 opts; do聲明中更改冒號的位置,這看起來沒有任何改變。

任何想法?

#Check that the $ACTION variable is of the form 「-[character]" 
if [[ ! $ACTION =~ ^-. ]] ; then 
    echo "2"; 
    printHelp; 
    exit 1; 
fi 

#Too many arguments passed 
if [[ ${#ACTION} -gt 2 ]] ; then 
    echo "3"; 
    printHelp; 
    exit 1; 
fi 

#Use cases for correct characters 
while getopts 「:v:」 opts; do 
    echo "4"; 
    case $opts in 
     v)  echo "1234" #vocabTest; 
       echo "${bold}STARTING VOCAB TEST:${reset}" 
       break 
       ;; 
     c)  #phraseTest; 
       echo "${bold}STARTING PHRASE TEST:${reset}" 
       exit 0 
       ;; 
     ?)  echo ""; 
       printHelp 
       exit 1 
       ;; 
    esac 
done      


} 
+1

刪除最後一個':'。你的例子中的引號是奇怪的引號,不會在bash腳本中正確讀取,使用正常的引號如''''不''' – 2015-04-07 12:07:36

+0

如果您期望,您還需要''getopts' arg字符串中的'c'這是一個有效的參數 –

回答

-1

我刪除了整個while循環,因爲它沒有達到任何目的。以下結束工作:

########################################################################################## 
# Check args passed to the script              # 
########################################################################################## 
ACTION=$1; 

#Check that the $ACTION variable is of the form 「-[character]" 
if [[ ! $ACTION =~ ^-. ]] ; then 
    printHelp; 
    exit 1; 
fi 

#Too many arguments passed 
if [[ ${#ACTION} -gt 2 ]] ; then 
    printHelp; 
    exit 1; 
fi 

#Use cases for correct characters 
case ${ACTION} in 
    (-v) echo "${bold}STARTING VOCAB TEST:${reset}" 
      ;; 
    c)  #phraseTest; 
      echo "${bold}STARTING PHRASE TEST:${reset}" 
      exit 0 
      ;; 
    ?)  echo ""; 
      printHelp 
      #exit 1 
      ;; 
esac 
+0

getopts用於所有的命令行參數,你寫的是不行的 – 2015-04-07 12:10:03

+0

這完全不等同於它不處理任何命令行參數 –

+0

@EtanReisner你'最後,我並沒有想要解析參數,而是添加了一個標誌,所以雖然這樣做「解決」了問題,但它並不能解決我所問的(錯誤)問題。 – TheMightyLlama