【问题标题】:Need to use getopts with one argument OR another需要将 getopts 与一个参数或另一个参数一起使用
【发布时间】:2014-03-18 19:52:55
【问题描述】:
while getopts gpr: | gpd: name
do
   case $name in
      g) echo " -g";;
      p) echo " -p";;
      r) echo " -r with '$OPTARG'";;
      d) echo " -d with '$OPTARG'";;
   esac
done

我知道这写错了。我想这样写,这样它就可以显示我需要它做什么。

带有 g、p、d 或 r 选项的脚本。关键是OR。

我尝试用谷歌搜索它,阅读手册,找到许多简单的例子。 问题是是否有办法做到这一点或 getopts 不支持这种行为。

【问题讨论】:

    标签: linux bash parameters getopts


    【解决方案1】:

    我会这样做:

    have_r=false
    have_d=false
    
    while getopts gpr:d: name; do
       case $name in
          g) echo " -g";;
          p) echo " -p";;
          r) echo " -r with '$OPTARG'"; have_r=true;;
          d) echo " -d with '$OPTARG'"; have_d=true;;
       esac
    done
    shift $((OPTIND - 1))
    
    if $have_r && $have_d; then
       echo "error, cannot use both -r and -d" >&2
       exit 1
    fi
    

    【讨论】:

      【解决方案2】:

      在解析-g-p-r-d 中的第一个后,以下将停止处理选项。如果需要,您可以在 if 语句中采取更强有力的措施(发出警告、退出脚本等)。

      while getopts gpr:d: name
      do
         if (( option_found == 1 )); then
             break
         fi
         case $name in
            g) echo " -g"; option_found=1;;
            p) echo " -p"; option_found=1;;
            r) echo " -r with '$OPTARG'"; option_found=1;;
            d) echo " -d with '$OPTARG'"; option_found=1;;
         esac
      done
      

      getopts 本身不会对所使用的选项强制执行任何类型的互斥。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-06
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 2014-08-28
        • 2014-10-29
        • 2018-05-09
        • 2015-07-23
        相关资源
        最近更新 更多