$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2 |
$# | 传递给脚本或函数的参数个数 |
$* | 传递给脚本或函数的所有参数 |
$@ | 传递给脚本或函数的所有参数。被双引号("")包含时,与 $* 稍有不同,下面讲解 |
$? | 上个命令的退出状态,或函数的返回值 |
$$ | 当前shell进程ID。对于 shell 脚本,就是这些脚本所在的进程ID |
$! | Shell最后运行的后台Process的PID(后台运行的最后一个进程ID号) |
$- | 显示Shell使用的当前选项,与 set 命令功能相同。 |
命令行参数
运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数...
#!/bin/bash # echo "\$\$: $$" echo "file name: $0" echo "first parameter: $1" echo "second parameter: $2" echo "quoted values: $@" echo "quoted valude: $*" echo "total number of parameters: $#" echo "echo $?"
运行结果:
[root@localhost shell]# ./test.sh captain hulk $$: 11322 file name: ./test.sh first parameter: captain second parameter: hulk quoted values: captain hulk quoted valude: captain hulk total number of parameters: 2 echo 0
$? 可以获取上一个命令的退出状态,所谓退出状态,就是上一个命令执行后的返回结果。
[root@localhost shell]# echo $?
0
$* 和 $@ 的区别
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)
#!/bin/bash # echo "\$*=" $* echo "\"\$*\"=" "$*" echo "\$@=" $@ echo "\"\$@\"=" "$@" echo "print each parameter from \$*" for var in $* do echo "$var" done echo "print each parameter from \$@" for var in $@ do echo "$var" done echo "print each parameter from \"\$*\"" for var in "$*" do echo "$var" done echo "print each parameter from \"\$@\"" for var in "$@" do echo "$var" done
运行结果:
[root@localhost shell]# ./test.sh 1 2 3 4 $*= 1 2 3 4 "$*"= 1 2 3 4 $@= 1 2 3 4 "$@"= 1 2 3 4 print each parameter from $* 1 2 3 4 print each parameter from $@ 1 2 3 4 print each parameter from "$*" 1 2 3 4 print each parameter from "$@" 1 2 3 4