方式一
示例
新建一个test.sh文件
#!/bin/bash
echo "shell 名称 = $0"
echo "参数1 = $1"
echo "参数2 = $2"
echo "参数3 = $3"
echo "参数4 = $4"
echo "参数5 = $5"
执行脚本 : sh test.sh 5 6 3 6 2
输出结果
shell 名称 = test.sh
参数1 = 5
参数2 = 6
参数3 = 3
参数4 = 6
参数5 = 2
使用该方式有两点需要注意的地方:"$0" 表示的是脚本本身
优点 : 获取参数方便、简洁
缺点 :必须按照指定的顺序输入参数,中间不能漏参数。否则参数将会产生错乱。
方式二 使用 getopts 方式获取
如果需要实现类似 rm -r -f 指定参数值的方式,则推荐使用此种方式。
使用该方式需要使用到Shell内置的函数"getopts"。
在使用之前你需要知道一下几个内置参数的意义:
- optstring option :字符串,当中为参数选项,会逐个匹配。
- varname :每次匹配成功的选项
- arg :参数值
- $OPTIND :option index,会逐个递增,初始值为1
- $OPTARG :option argument,不同情况下会有不同的值
该函数的具体使用方式 : getopts [option[:]] VARIABLE
参数说明:
- [option[:]] 表示参数,以"🅰️b:c:"的方式设置
#####注意细节:
- 以":"开头时:getopts不会提示错误信息,会区分invalid option错误和miss option argument,两种错误的值不一样。invalid option错误时,VARIABLE会被设为*?。为出问题的option。miss option argument时,VARIABLE会被设为*。$OPTARG为出问题的option。
- 不以":"开头时:getopts会提示错误信息。会根据invalid option错误和miss option argument。提示两种不同的错误。VARIABLE都会被设为?*。$OPTARG都为空
- 如果option后面跟了":"表示该option可以接收参数,参数(argument)会被放在$OPTARG中。
#!/bin/bash
while getopts ":a:p:n:s:" opt
do
case $opt in
n)
echo "$OPTARG"
;;
s)
echo "$OPTARG"
;;
a)
echo "$OPTARG"
;;
p)
echo "$OPTARG"
;;
*)
echo "未知参数$opt"
echo "参数值$OPTARG"
;;
?)
echo "未知参数$opt"
echo "参数值$OPTARG"
;;
esac
done
执行:sh getopt.sh -a 12 -p 32 -s string -n 你好 -r 世界
输出:
12
32
string
你好
install.sh: 非法选项 -- r
未知参数?
参数值