如何在Shell脚本中使用GetOPT获取多个参数



我想通过使用shell脚本中的getopts在命令中传递多个值。

示例

样本-a 0 -p 1 -t 1 2 3

如何使用bash shell脚本中的getopts通过-t选项获得所有三个参数?

您可以在脚本中 shift 命令:

例如:

while [ "$1" != "" ]; do
    case $1 in
        -a ) shift
        #do somethings with 0
                ;;
        -p ) shift
        #do somethings with 1
                ;;
        -t ) shift
        #do somethings with all of the numbers after -t
        ;;
        * ) #usage
            exit 1
    esac
    shift
done

您必须使用引号:

sample -a 0 -p 1 -t "1 2 3"

更新:(根据下面的注释,OP无法使用引号,因为字符串即将到来的表单用户)

这是一个脚本,在插入正确的报价后,将整个命令行参数并重建它(假设仅使用getopts类型开关):

#!/bin/bash
# surround all arguments values by double quotes
args="$(sed -r 's/(-[A-Za-z]+ )([^-]*)( |$)/1"2"3/g' <<< $@)"
# create an array from prepared string
declare -a a="($args)"
# prepare positional arguments for getopts
set - "${a[@]}"
# rest of the getopts script follows
while getopts "e:d:c:ab" optionName; do
   echo "-$optionName is present [$OPTARG]"
done

测试:

./opts.sh -c ccc -d d1 d2 d3 -e egg hunt -a
-c is present [ccc]
-d is present [d1 d2 d3]
-e is present [egg hunt]
-a is present []

在线演示:http://ideone.com/kwnnms

相关内容

  • 没有找到相关文章

最新更新