shell中的特殊参数:
$#: 传递到脚本的参数个数
$*: 以一个单字符串显示所有向脚本传递的参数
$$: 脚本运行的当前进程ID
$@: 与$#相同,但在使用时加引号,并在引号中返回每个参数
$-: 显示shell使用的当前选项,与set命令功能相同
$?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$0: 脚本名字,$1位置参数1,$2位置参数2... ${10}位置参数10
$_: 之前命令的最后一个参数
手动处理命令行参数复杂而容易出问题,我们可以直接利用getopts和getopt来处理shell的外部传入的参数。
getopts
getopts不支持长选项,它的使用模板如下:
#/bin/bash
while getopts ":o:f:a" opt
do
case $opt in
o)
echo "option $OPTARG"
;;
f)
echo "filename $OPTARG"
;;
a)
echo "a"
;;
?)
echo "Unknow input"
exit 1
;;
esac
done
getopts使用形式:getopts option_string var
后边带:的,表示必须带有参数,
o:f:a,表示o和f后必须带有实际值,而a不需要。
传递变量时,
OPTARG保存选项的参数。
OPTIND存储的是下一个参数的index。
在optin_string最前面加:时,如果a是带参数但实际没有传入,会自动报错,如果不加:,运行时不带参数传入会被忽略。
getopts在检测到非法参数就会停止。
getopt
如果需要支持长选项以及可选参数,就需要使用getopt。
比较复杂,但功能更强大。