在 Shell Script Bash $開頭的是變數, $? 這個是有特殊的變數.
當執行指令時都會回傳一個執行後的代碼給變數 $?,成功的執行完指令後會回傳一個 0 值(有錯誤時會回傳 錯誤代碼).
利用 ping 的指令來看看 變數 $? 的變化.
ping 參數 一個封包 (-c 1) , 等待回應時間為一秒 (-w 1)
root@ubuntu:~# ping -c 1 -w 1 192.8.1.1 PING 192.8.1.1 (192.8.1.1) 56(84) bytes of data. --- 192.8.1.1 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 999ms root@ubuntu:~# echo $? 1
root@ubuntu:~# ping -c 1 -w 1 172.16.15.130 PING 172.16.15.130 (172.16.15.130) 56(84) bytes of data. 64 bytes from 172.16.15.130: icmp_seq=1 ttl=64 time=0.050 ms --- 172.16.15.130 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.050/0.050/0.050/0.000 ms root@ubuntu:~# echo $? 0
可以很明顯看到當 ping 成功後回傳得值為 0 ,失敗則回傳 1 .
變數 $? 常會與 && || 一起使用,我們現來看一下 && || 的用法
- cmd1 && cmd2 : 若 cmd1 執行正確且無錯誤 ($?=0),則執行 cmd2 ,反之若 cmd1 執行完畢且為錯誤 ($?≠0),則 cmd2 不執行.
- cmd1 || cmd2 : 若 cmd1 執行正確且無錯誤 ($?=0),則 cmd2 不執行 ,反之若 cmd1 執行完畢且為錯誤 ($?≠0),則開始執行 cmd2.
下面的範例的語法是常用的架構 (這 && 與 || 的順序就是固定),用以判斷 command1 的執行是成功還是失敗,成功則執行 command2 失敗則執行 command 3
command1 && command2 || command3
使用上面所說的常用 && || 的判斷式的架構範例.
root@ubuntu:~# ping -c 1 -w 1 192.8.1.1 &> /dev/null && echo "This IP is unavailable." || echo "This IP is available." This IP is available.
root@ubuntu:~# ping -c 1 -w 1 172.16.15.130 &> /dev/null && echo "This IP is unavailable." || echo "This IP is available." This IP is unavailable.
語法說明 :
ping 參數 一個封包 (-c 1) , 等待回應時間為一秒 (-w 1)
&> (等同 2>&1 ) 標準輸出 (stdout)+標準錯誤輸出 (stderr) ,把執行結果內容導向至 /dev/null (空裝置,也就是不會把結果顯示在標準輸出)
簡化一下剛剛的指令
ping && echo “unavailable.” || echo “available.”
ping 成功後 ($?=0) echo “unavailable.”,因為 $?=0 所以後半段 || 就不會去執行了.
ping 失敗後 ($?≠0) ,不執行 echo “unavailable.”,因為 $?≠0 所以後半段 || 就會去執行 echo “available.” 了.
沒有解決問題,試試搜尋本站其他內容