简体   繁体   English

getopts 中的顺序参数

[英]order parameters in getopts

I have to write very simple script.我必须编写非常简单的脚本。 It should take 2 args -h and -q.它应该需要 2 个参数 -h 和 -q。 Both are optional, -h can be somewhere.两者都是可选的, -h 可以在某处。 So, -h -q should does the same action like -q -h.因此,-h -q 应该执行与 -q -h 相同的操作。 If I pass -a ,or -a -a -a - an error should occurs (I mean exit 1).如果我通过 -a 或 -a -a -a - 应该发生错误(我的意思是退出 1)。 If I pass -a -h -a -a -b.... - it should return "I couldn't recognize -a" + invoke help case.如果我通过 -a -h -a -a -b.... - 它应该返回“我无法识别 -a”+ 调用帮助案例。 So -h has priority.所以 -h 有优先权。 Could you help me?你可以帮帮我吗?

while getopts "hq" OPTION
do
case $OPTION in
  h)
     echo "Help here!" ;
     exit 0;
     
esac
done
shift $(($OPTIND - 1))

while getopts "hq" OPTION
do
case $OPTION in
  q) #quiet - return 0, do nothing. 
     exit 0;;
 

                   
  *) #If -a or sth
     echo "I couldn't recognize args" 
     echo "Help here" 
     exit 1
     ;;
     
esac
     
done

This is the correct implementation:这是正确的实现:

#!/usr/bin/env bash

while getopts :hq OPTION
do  
    case $OPTION in
    h) echo "Help here!" ;
       exit 0;;
    q) echo "quiet do nothing."
       exit 0;;
    ?) echo "I couldn't recognize option [$1]" 
       exit 1;;
    esac
done
shift $((OPTIND - 1))

Note :hq and ?) to process incorrect options (-a -b ...)注意:hq?)处理不正确的选项(-a -b ...)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM