Bash getops参数的问题

Bash getops参数的问题,bash,Bash,目前,我正在编写一个bash脚本,该脚本旨在通过它传递参数 我的getOps行: while getopts ":s:d:e:*" opt; do case $opt in s) kb_status ;; d) kb_disable ;; e) kb_enable ;; *) echo "Invalid option: -$OPTARG" ;; esac do

目前,我正在编写一个bash脚本,该脚本旨在通过它传递参数

我的getOps行:

while getopts ":s:d:e:*" opt; do
  case $opt in
    s) 
      kb_status
      ;;
    d)
      kb_disable
      ;;
    e)
      kb_enable
      ;;
    *)
      echo "Invalid option: -$OPTARG"
      ;;
  esac
done
主要问题是每当我试图通过脚本时

./myscript.sh -e`
我从我的通配符参数中得到以下消息:

无效选项:-e

但是,当我以

./myscript.sh -ee 
或者在参数中有任何第二个字母,它都可以很好地通过。有人能帮我解决这个问题吗?

问题是e后面的“:”字符

while getopts ":s:d:e:*" opt; do
“:”告诉getopts在-e选项之后需要一个参数

因此,如果希望脚本只支持-s-d和-e选项,请执行以下操作:

while getopts sde opt; do
问题是e后面的“:”字符

while getopts ":s:d:e:*" opt; do
“:”告诉getopts在-e选项之后需要一个参数

因此,如果希望脚本只支持-s-d和-e选项,请执行以下操作:

while getopts sde opt; do

放在选项列表中
e
之后意味着
-e
选项需要一个参数
-e
本身缺少参数,
-ee
将参数的值设置为
e

由于您不使用
$OPTARG
执行任何操作,因此看起来您实际上不需要选项的参数,因此不应该在每个选项后面使用

while getopts ":sde*" opt; do

还不清楚为什么在选项列表的末尾有
*
。这将允许
“-*”
,但是
案例
块将报告这是一个错误。

放在选项列表中
e
之后意味着
-e
选项需要一个参数
-e
本身缺少参数,
-ee
将参数的值设置为
e

由于您不使用
$OPTARG
执行任何操作,因此看起来您实际上不需要选项的参数,因此不应该在每个选项后面使用

while getopts ":sde*" opt; do
还不清楚为什么在选项列表的末尾有
*
。这将允许
“-*”
,但
案例
块会将其报告为错误