当选项存在时,如何将某些变量设置为某个值

时间:2013-05-07 17:36:33

标签: bash

我不擅长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是必需的吗?

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

1 个答案:

答案 0 :(得分:4)

:参数中的字母后面加getopts表示是否需要参数。所以改为:

while getopts “hwv:m:V” OPTION

从脚本中删除:V会破坏它,因为:适用于它之前的m选项,而不是之后的V选项。删除:后,表示m不再使用参数,但您需要参数。