首页 > 解决方案 > getopts 中的订单参数

问题描述

我必须编写非常简单的脚本。它应该需要 2 个参数 -h 和 -q。两者都是可选的, -h 可以在某个地方。因此,-h -q 应该执行与 -q -h 相同的操作。如果我通过 -a 或 -a -a -a - 应该会发生错误(我的意思是退出 1)。如果我通过 -a -h -a -a -b.... - 它应该返回“我无法识别 -a”+ 调用帮助案例。所以 -h 有优先权。你可以帮帮我吗?

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

标签: linuxbashshell

解决方案


这是正确的实现:

#!/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))

注意:hq?)处理不正确的选项(-a -b ...)


推荐阅读