Ksh 内置 getopts 未执行选项的正确 case 块

Ksh 内置 getopts 未执行选项的正确 case 块

当我使用选项 p 且不带参数运行下面的代码时,它将转到其他选项,因为它应该执行 case p 的打印语句)。需要修复什么

另外,我希望代码在没有给出选项时执行 h|* ) 块。如何实现它。

代码:

while getopts ":vhp:" Option; do
  case ${Option} in
    v )
      print -- "${ScriptVersion}" 2>/dev/null
      exit 0
    ;;

    p )
      AbsPackageName="${OPTARG}"
      if [[ -z ${AbsPackageName} ]]; then
        print -- "Missing Information.Please provide Package Name details."
        exit 2
      fi
    ;;

    h|* )
      print -- "USAGE: ${ScriptName} -p [Absolute path of Package Name]" 2>/dev/null
      print -- "Parameter Descriptions:" 2>/dev/null
      print -- "-v ) Script Version" 2>/dev/null
      print -- "-h ) Show this usage message" 2>/dev/null
      exit 0
    ;;

  esac
done

执行:

[root@localhost Desktop]# ./pkg2.ksh -p
USAGE: pkg2.ksh -p [Absolute path of Package Name]
Parameter Descriptions:
-v ) Script Version
-h ) Show this usage message

答案1

您应该用作h|* )最后一个 case 块,因为它与检查之前的任何内容匹配-p

相关内容