关于shell:bash中的参数解析

Argument parsing in bash

本问题已经有最佳答案,请猛点这里访问。

我是个新手。以下问题需要建议。

所以我想用这种方式执行脚本

1
./myscript --bootstrap bootstrap.exe --vmmount ./vmmount --image /dev/sdb2 --target-exe installer.exe [--internal-exe] param1 param2 param3 ...

我已经完成的参数分析器:

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
VMMOUNT=""
BOOTSTRAP=""
IMAGE_FILE=""
TARGET_EXE=""
INTERNAL_EXE=""
while : ; do
if ["$1" ="--vmmount" ] ; then
    [ -n"${VMMOUNT}" ] && usage
    VMMOUNT="$2"
    shift
    shift
elif ["$1" ="--bootstrap" ] ; then
    [ -n"${BOOTSTRAP}" ] && usage
    BOOTSTRAP="$2"
    shift
    shift
elif ["$1" ="--image" ] ; then
    [ -n"${IMAGE_FILE}" ] && usage
    IMAGE_FILE="$2"
    shift
    shift      
elif ["$1" ="--target-exe" ] ; then
    [ -n"${TARGET_EXE}" ] && usage
    TARGET_EXE="$2"
    shift
    shift
elif ["$1" ="--internal-exe" ] ; then
    [ -n"${INTERNAL_EXE}" ] && usage
    INTERNAL_EXE="true"
    shift
    shift
else
    break
fi
done
my_method"${IMAGE_FILE}""${VMMOUNT}""${BOOTSTRAP}""${TARGET_EXE}""${INTERNAL_EXE}"

现在我在解析参数param1和param2等方面有点困惑,如何解析它们呢?我可以使用$@将参数作为数组或任何其他有效的方法吗?


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
VMMOUNT=""
BOOTSTRAP=""
IMAGE_FILE=""
TARGET_EXE=""
INTERNAL_EXE=""
while : ; do
  case"$1" in
    --vmmount)
       [ -n"${VMMOUNT}" ] && usage
       VMMOUNT="$2"
       shift 2 ;;
    --bootstrap)
       [ -n"${BOOTSTRAP}" ] && usage
       BOOTSTRAP="$2"
       shift 2 ;;
    --image)
       [ -n"${IMAGE_FILE}" ] && usage
       IMAGE_FILE="$2"
       shift 2 ;;    
    --target-exe)
       [ -n"${TARGET_EXE}" ] && usage
       TARGET_EXE="$2"
       shift 2 ;;
    --internal-exe)
       [ -n"${INTERNAL_EXE}" ] && usage
       INTERNAL_EXE="true"
       shift ;;
    *)
       break ;;
  esac
done
my_method"${IMAGE_FILE}""${VMMOUNT}""${BOOTSTRAP}""${TARGET_EXE}""${INTERNAL_EXE}""$@"

别忘了用双引号括起来。


我建议您使用getopt来解析命令行参数,而不是手工编码它。这会节省很多时间。

还显示在如何解析bash中的命令行参数中?