####前言
linux shell脚本中 获取参数 大致上 有
- 直接 xxx.sh p1 p2
直接通过获取 脚本后面跟着的参数 进行操作 - getopts
获取 脚本后面的选项 - getopt
获取脚本后面的可变选项 - read
从键盘或者文件中读取参数
这几种方案
参考地址:
http://diseng.github.io/2015/04/15/shell-argvs-type
直接接收shell脚本后面的参数
调用脚本的格式
1 | xxx.sh arg1 arg2 |
脚本中获取参数的方式
$1 = arg1
$2 = arg2
注意点:
- $0:指脚本本身
- $(num)脚本后面跟着的参数 num从1开始
- $#:入参的总数 不包含脚本本身
- $@:入参列表 不包含脚本本身
- $*:和$@相同,但”$” 和 “$@”(加引号)并不同,”$“将所有的参数解释成一个字符串,而”$@”是一个参数数组
例子:1
2
3
4
5
6
7
8
9
10
11echo '
#!/bin/bash
echo $1
echo $2
echo $0
echo $#
echo $@
echo $*
' > test.sh
chmod +x ./test.sh
./test.sh ming jiu
getopts
带选项方式接收入参
调用脚本的方式
1 | xxx.sh -a -b 'xx' |
定义选项的方式
定义ab两个选项 a不带:不接收参数 b带:必须接收参数
1 | getopts "ab:" |
例子:
1 | echo ' |
getopt
增强版本的getopts 可以接收长参数、可以指定可选参数
调用脚本方式
1 | xxx.sh -a -b bval --aparam |
定义接收参数的格式
- 没有:不接受参数
- 一个:接收参数
- 两个:选项参数可选
-o 设置短选项 -l 设置长选项
ARGS后面不是单引号(‘) 是制表符(tab)上面的那个英文符号(`)例子:1
2ARGS=`getopt -o ab: -l"aparam::,help" -- "$@"`
eval set --"${ARGS}"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#!/bin/bash
ARGS=`getopt -o ab: -l "aparam:,help" -- "$@"`
eval set -- "${ARGS}"
while true;
do
case "$1" in
-a)
echo "-a "
shift
;;
-b)
echo "-b $2"
shift 2
;;
--aparam)
echo "-aparam $2"
shift 2
;;
--help)
echo "help"
exit 0
;;
--)
shift
break
;;
*)
echo "错误!"
exit 1
;;
esac
done
' > test.sh
chmod +x ./test.sh
./test.sh -a -b bbbb --aparam aaaapp
read
利用接收键盘输入来输入参数
1 | echo ' |
总结
shell接收参数方式 总的来说 简单脚本 直接使用 $1 …就够用了
如果要设计复杂的参数 可以使用 getopt getopts 来编写
要进行交互式的 可以使用 read 读取键盘输入来执行
或者甚至可以利用 其他的命令 从文件 从标准输出中读取数据 利用 xargs 这样的套路去配置参数