2015-04-07 33 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