shell中的特殊变量

一、$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

八、!!

执行上一条命令

九、学习博文

Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义以及linux命令执行返回值代表意义

Previous Post

shell下的字符串变量连接与数值相加

Next Post

linux获取程序运行绝对路径

Related Posts