如果使用getopts进行解析,shell脚本标志可以具有可选参数吗?

时间:2018-08-29 16:30:20

标签: shell posix getopts

我有一个想通过三种方式运行的脚本:

  1. 没有标志-./script.sh
  2. 带有标志但没有参数-./script.sh -u
  3. 带有带有参数的标志-./script.sh -u username

有没有办法做到这一点?

在阅读了一些指南(例如herehere之后),这似乎是不可能的,尤其是当我想使用getopts时。

我可以使用getopts来执行此操作,还是需要以其他方式解析我的选项?我的目标是,如果可以的话,继续使用getopts

1 个答案:

答案 0 :(得分:0)

BashFAQ#35中的非getopts示例可以说明用例:

user_set=0  # 1 if any -u is given
user=       # set to specific string for -u, if provided
while :; do
  case $1 in
    -u=*) user_set=1; user=${1#*=} ;;
    -u)   user_set=1
          if [ -n "$2" ]; then
            user=$2
            shift
          fi ;;
    --)   shift; break ;;
    *)    break ;;
  esac
  shift
done