目录

Bash 脚本长参数(getopts)

在脚本里面使用 getopts 获取参数。

示例

test2.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash

function main() {

    local OPTIND

    count=0

    while getopts ab:-: OPT
    do
        echo "current -${OPT}${OPTARG}"

        case "${OPT}" in 
            -)
                case "${OPTARG%%=*}" in
                    atest)
                        echo "option: --${OPTARG}"
                        echo ""
                        let count++
                        ;; 
                    btest)
                        echo "option: --${OPTARG%%=*}"
                        echo "value: ${OPTARG#*=}"
                        echo ""
                        let count=count+2
                        ;;
                esac
                ;; 
            a)
                echo "option: ${OPTIND}"
                echo ""
                let count++
                ;; 
            b)
                echo "option: ${OPTIND}"
                echo "value: ${OPTARG}"
                echo ""
                let count=count+2
                ;; 
        esac
    done

    shift $count

    echo "rest option(s): $@"
}

main "$@"

执行:

bash test2.sh --atest --btest="2 4" -- --ctest=3 --dtest=4

结果:

1
2
3
4
5
6
7
8
current --atest
option: --atest

current --btest=2 4
option: --btest
value: 2 4

rest option(s): --ctest=3 --dtest=4

解释

与 getopt 相比:

  • while 里面不能使用 shift,必须在结束之后统一 shift
  • 长选项不能用纯空格隔开
  • 放在 function 里面的时候,必须先执行 local OPTIND
  • 不必另外处理 -- 的情况