$?
獲取最近一個命令的結果, 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