一、$0
shell脚本的名字
示例
[root@vm172-31-48-17 test]# cat test.sh
#!/bin/bash
echo $0
[root@vm172-31-48-17 test]# sh test.sh
test.sh
二、$n
shell脚本后面n个位置的参数
示例
[root@vm172-31-48-17 test]# cat test.sh
#!/bin/bash
echo $0
echo "\$1的参数为:$1"
echo "\$2的参数为:$2"
echo "\$3的参数为:$3"
echo "\$4的参数为:$4"
[root@vm172-31-48-17 test]# sh test.sh 1 2 3
test.sh
$1的参数为:1
$2的参数为:2
$3的参数为:3
$4的参数为:
[root@vm172-31-48-17 test]# sh test.sh 1 2 3 4
test.sh
$1的参数为:1
$2的参数为:2
$3的参数为:3
$4的参数为:4
三、$*、$@
传递给脚本或函数的所有参数。$*会将这些参数视为一个整体,而不是多个个体。$@会将所有参数当作同一字符串中的多个独立的单词.
示例
[root@vm172-31-48-17 test]# cat test.sh
#!/bin/bash
echo "Usint the \$* method: $*"
echo "Using the \$@ method: $@"
echo
count=1
for param in "$*"
do
echo "\$* params #$count = $param"
count=$[ $count + 1 ]
done
count=1
for param in "$@"
do
echo "\$@ params #$count = $param"
count=$[ $count + 1 ]
done
[root@vm172-31-48-17 test]# sh test.sh 1 2 3
Usint the $* method: 1 2 3
Using the $@ method: 1 2 3
$* params #1 = 1 2 3
$@ params #1 = 1
$@ params #2 = 2
$@ params #3 = 3
四、$\
shell脚本参数的个数
示例
[root@vm172-31-48-17 test]# cat test.sh
#!/bin/bash
echo "\$#的值为:$#"
[root@vm172-31-48-17 test]# sh test.sh 1 2 3
$#的值为:3
五、$?
shell命令执行后状态码。0表示命令执行成功,非0表示命令执行失败(默认为1)。 在shell脚本中使用exit命令,后面可以跟0-255的整数值,做为状态码返回。
示例:
[root@vm172-31-48-17 ~]# pwd
/root
[root@vm172-31-48-17 ~]# echo $?
0
[root@vm172-31-48-17 ~]# mkdir data
mkdir: cannot create directory ‘data’: File exists
[root@vm172-31-48-17 ~]# echo $?
1
[root@vm172-31-48-17 ~]#
六、$$
当前shell进程的PID
示例
[root@vm172-31-48-17 test]# cat test.sh
#!/bin/bash
echo "\$$的值为:$$"
ps aux|grep test
sleep 10s
[root@vm172-31-48-17 test]# sh test.sh
$$的值为:10782
root 10782 0.0 0.0 113192 2592 pts/1 S+ 14:01 0:00 sh test.sh
root 10784 0.0 0.0 112720 2228 pts/1 S+ 14:01 0:00 grep test
七、$!
最后一个后台命令的PID
八、!!
执行上一条命令