特殊变量列表
$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

 

posted on 2018-03-06 17:49  队长china  阅读(203)  评论(0编辑  收藏  举报