1

我不擅长 Bash 脚本,并试图了解更多。让我用代码介绍我的问题:

#!/bin/bash
version_num=
isWindows=
MSVC_VER=
VERBOSE=
while getopts “hw:v:m:V” OPTION
do
     case $OPTION in
         h)
             usage
             exit 1
             ;;
         w)
             isWindows=$OPTARG
             ;;
         v)
             version_num=$OPTARG
             ;;
         m)
             MSVC_VER=$OPTARG
             ;;
         V)
             VERBOSE=1
             ;;
         ?)
             usage
             exit
             ;;
     esac
done

对于空间,使用功能被删除。

我的问题是:

第一个问题

目前,如果我使用这个脚本,我必须在每个选项之后提供参数值,例如:

 `bash test_bash.sh -v 4.2.2.0 -m 10.0 -w 1`

但是,假设我只需要查看是否-w存在,那么设置一些变量值。我不想提供-w 1,因为1它只是做某事的标志。我希望脚本像这样工作:

 bash test_bash.sh -w -v 4.2.2.0 -m 10.0

我怎样才能做到这一点?我想做类似的事情rm -r -f,它可以有多个选项,并且不需要每个选项后跟一些值。

第二个问题

如果我删除

V)
   VERBOSE=1 
   ;;

并且:V从该while行开始VERBOSE=,该脚本不再起作用。是因为:V需要吗?

非常感谢您的时间和帮助!

4

1 回答 1

4

:在参数中的字母后面加上a表示getopts它后面是否有参数。所以改为:

while getopts “hwv:m:V” OPTION

从脚本中删除:V会破坏它,因为它:是针对m它之前的选项,而不是V之后的选项。当您删除 that:时,这意味着m不再需要参数,但您需要它。

于 2013-05-07T17:40:48.073 回答