Shell腳本中最常用的特殊變量(附樣例)

$?

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章