$?
获取最近一个命令的结果, 0代表着成功
,其余代表着失败
$?测试Shell脚本test.sh
#!/bin/bash
url=www.csdn.net
ping -c 1 -W 5 $url
num=$?
if [[ $num -eq 0 ]];then
echo "${url}可以ping通"
else
echo "${url}无法ping通"
fi
运行结果
localhost :wise$ sh test.sh
PING www.csdn.net (47.95.164.112): 56 data bytes
--- www.csdn.net ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss, 1 packets out of wait time
round-trip min/avg/max/stddev = 7.250/7.250/7.250/0.000 ms
www.csdn.net可以ping通
当我们将url=www.csdn.net
修改为url=www.csdn.net/
的运行结果
localhost :wise$ sh test.sh
ping: cannot resolve www.csdn.net/: Unknown host
www.csdn.net/无法ping通
$* 与 $@
这俩个特殊变量的使用很接近, 所以我们就一起拿来说
我们先来看下它们的正常输出
# test.sh
echo $*
echo $@
# result
localhost: wise$ sh test.sh aa bb cc dd
aa bb cc dd
aa bb cc dd
没有区别, 接下来我们为它们加上双引号""
, 然后循环输出所有参数看一下
# test.sh
for param in "$*"
do
echo $param
done
echo "------------------"
for param in "$@"
do
echo $param
done
# result
localhost wise$ sh test.sh aa bb cc dd
aa bb cc dd
------------------
aa
bb
cc
dd
我们可以看到$*
输出的任然是将所有的参数当作整体一起输出, 并只输出了一次, 而$@
将所有的参数进行了分隔
如果你需要读取参数列表并需要将其进行格式转换就选择$@
如果你需要将参数列表作为一个整体来操作的话就选择$*
$0
获取当前脚本名称
# test.sh
echo $0
# result
localhost wise$ sh test.sh
test.sh
$#
获取运行脚本时传递的参数个数
# test.sh
echo $#
# result
localhost wise$ sh test.sh aa bb cc
3
$n
获取第n
个参数
# test.sh
echo $1
echo $2
echo $3
# result
localhost wise$ sh test.sh aa bb cc
aa
bb
cc
$$
获取当前脚本运行的进程ID
$!
获取当前脚本中最近一个后台命令的进程ID