shell-script-01 shell中 $? 的基本使用

shell-script-01 shell中 $? 的基本使用

  shell中,$? 表示获取上一个命令的退出状态;也可以用于表示函数返回值。

实例

1、获取上一个脚本的退出状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# vim test.sh
[root@localhost ~]# chmod +x test.sh
[root@localhost ~]# cat test.sh
#!/bin/bash
if [ "$1" == 100 ]
then
exit 0 #参数正确,退出状态为0
else
exit 1 #参数错误,退出状态1
fi
[root@localhost ~]#

#运行 test.sh 时传递参数 100:
[root@localhost ~]# ./test.sh 100
[root@localhost ~]# echo $?
0
[root@localhost ~]#


#运行 test.sh 时传递参数 101:
[root@localhost ~]# ./test.sh 101
[root@localhost ~]# echo $?
1
[root@localhost ~]#

2、求和,得到函数返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@localhost ~]# vim add.sh
[root@localhost ~]# chmod +x add.sh
[root@localhost ~]# cat add.sh
#!/bin/bash
#得到两个数相加的和
function add(){
return `expr $1 + $2`
}
add 23 50 #调用函数
echo $? #获取函数返回值
[root@localhost ~]# ./add.sh
73
[root@localhost ~]#


#也可以这样写
[root@localhost ~]# vim add.sh
[root@localhost ~]# cat add.sh
#!/bin/bash
#得到两个数相加的和
function add(){
return `expr $1 + $2`
}
add $1 $2 #调用函数
echo $? #获取函数返回值
[root@localhost ~]# ./add.sh 10 20
30
[root@localhost ~]#

3、用来判断ping的结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]# ping baidu.com -c 2
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=35.8 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=33.4 ms

--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 33.472/34.647/35.822/1.175 ms
[root@localhost ~]# echo $?
0
[root@localhost ~]# ping google.com -c 2
PING google.com (172.217.27.142) 56(84) bytes of data.

--- google.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

[root@localhost ~]# echo $?
1
[root@localhost ~]#

如下图,可以看到对于能ping通的baidu.com返回值是0,对于ping不通的google.com返回值是1。

欢迎打赏,谢谢
------ 本文结束------
0%