Shell参数传递
- $0 文件名
- $# 传递的参数个数
- $1,$2,按照这个顺序传参数,但$10以后,就必须使用${10}.${11}来引用,因为$10shell可能解释成${1}0
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
赋值注意点
- 单引号和双引号的区别
- 赋值语句,等号两边不能有空格
- 类似如下语句
- [ $1 = "root" ] && do something, $1两边必须加引号以防$1为空出现语法错误 [ "$1" = "root" ] && do something
- if语句测试后面要分号,必须加空格 if [ "$a" = "C" ] ; then ....fi ,这些地方都要加空格
- if的后面的命令不一定要用test命令即 [ ] ,也可以直接测试比如 if grep -q centos /etc/*conf 2>/dev/null ; then ...fi
- for语句生成序列: for num in $(seq -s ' ' 1 10)
- 计算使用2对括号 $(( 5+ 6 ))
- 执行使用一对括号 value=$(somecmd)
case语句注意点
case语句中,使用2个分号结束当前分值
case 变量 in
PAT1)
执行语句
;;
PAT2)
执行语句
;;
*)
默认执行语句
;;
esac
函数的使用
函数中使用参数的语法规则,$n表示第n个参数,和向脚本传参数一个道理
name() {
arg1=$1
arg2=$2
command on $arg1
}
使用如下语法来调用函数
name foo bar
name = 函数名。
foo = 参数1 传递给函数的第一个参数(位置参数$1)。
bar = 参数2 传递给函数的第二个参数(位置参数$2)