直接传参

一般情况下直接传参,比如

test.sh

1
2
#!/bin/bash
echo hello $1

./test.sh world
hello world

使用 getopts 解析参数

这种方法可以忽略参数位置,使脚本更完善

test.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while getopts "a:b:c" arg           #选项后面的冒号表示该选项需要参数
do
case $arg in
a)
echo "a $OPTARG" #参数存在$OPTARG中
;;
b)
echo "b $OPTARG"
;;
c)
echo "c"
;;
?) #当有不认识的选项的时候arg为?
echo "unkonw argument"
exit 1
;;
esac
done
1
2
3
4
~$ ./test.sh -a 1 -b 2 -c  
a 1
b 2
c

使用 shift

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
#!/bin/bash

help() {
cat <<-EOF
这里是帮助文档
EOF
}

[ $# -eq 0 ] && help && exit 0
while [[ $# -gt 0 ]]; do
case "$1" in
-n | --name)
name="$2"
shift
;;
-c | --count)
count="$2"
shift
;;
-h | --help)
help
exit 0
;;
--)
shift
;;
*)
help
exit 0
esac
shift
done

echo name: $name
echo count: $count