加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

干貨 | Linux shell 語(yǔ)法 if [ $? == 0 ] 詳細(xì)

09/27 13:47
13.2萬(wàn)
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

哈嘍,大家好,我是小G。

linux shell 功能很強(qiáng)大,平時(shí)工作主要在linux下做開(kāi)發(fā),不管是調(diào)試問(wèn)題、還是自動(dòng)化測(cè)試需要,或者是閱讀項(xiàng)目代碼中的編譯構(gòu)建腳本,基本上都避免不了shell 語(yǔ)法規(guī)則的學(xué)習(xí)。今天記錄一篇 linux shell 語(yǔ)法筆記。之前其他所有?linux命令系列?文章,可見(jiàn)文章末尾。

if [ $? == 0 ]

語(yǔ)法很簡(jiǎn)單,

1、 $??是上一條程序指令執(zhí)行是否成功的標(biāo)志,如果執(zhí)行成功則$? 值為0,否則值不為0 ;

2、$??最大的價(jià)值,就是可以用來(lái)判斷上一個(gè)條程序指令執(zhí)行是否成功,利用這樣的特性,就會(huì)很方便我們干一些 if...else...的事情;

3、 if [ $? == 0 ]?等價(jià)于 if [ $? -eq 0 ] 。

所以, if [ $? == 0 ] ?這條語(yǔ)句,主要就是可以用來(lái)判斷上一個(gè)命令執(zhí)行后的退出狀態(tài)。

在平時(shí)編寫(xiě) shell 腳本的時(shí)候,是經(jīng)常會(huì)看到有使用if語(yǔ)句以及$? 的,語(yǔ)法簡(jiǎn)單而且非常有用。如:

?if?[?"$?"?!=?0?] ;?then
? ?echo?" last cmd is failed"
? ?exit?1
?fi

再如,附一個(gè)借助 $? ,實(shí)現(xiàn)自動(dòng)刪除不必要文件的例子:

#! /bin/bash
My_DIR='/temp/test/' ?

cd $My_DIR
if [ $? -eq 0 ]; then ?# 檢查cd命令是否成功,如果成功才執(zhí)行rm命令
 ? ? ? ?rm -rf *txt
else 'test directory is not exist' ?# 如果cd命令運(yùn)行失敗,則打印一個(gè)錯(cuò)誤信息,并退出,返回狀態(tài)碼1
 ? ? ? ?exit 1
fi

最后,附個(gè)其他常見(jiàn)特殊符號(hào)和含義:

$0: 腳本本身,即腳本的名字
$*: 以一對(duì)雙引號(hào)給出參數(shù)列表
$@: 將各個(gè)參數(shù)分別加雙引號(hào)返回
$#: 參數(shù)的個(gè)數(shù)
$_: 代表上一個(gè)命令的最后一個(gè)參數(shù)
$$: 代表所在命令的PID
$!: 代表最后執(zhí)行的后臺(tái)命令的PID
$?: 代表上一個(gè)命令執(zhí)行后的退出狀態(tài)

shell真的很強(qiáng)大,熟悉了shell感覺(jué)就是生產(chǎn)力,最近工作中還有碰到一個(gè)難搞的低概率性重啟死機(jī)異常問(wèn)題,最后為了復(fù)現(xiàn)、修改、壓測(cè),也是借助于Linux shell 腳本最終搞定的。解決死機(jī)問(wèn)題時(shí)涉及的知識(shí)點(diǎn)比較多,后續(xù)有時(shí)間把核心的 Linux shell 腳本實(shí)現(xiàn)看是否能抽離出來(lái),再整理一下,寫(xiě)一篇文章吧,Mark一下。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

記錄和分享C/C++、Linux、ARM、Android、IoT相關(guān)知識(shí)。技術(shù)相伴于生活和成長(zhǎng),愿你我永為少年,心中有火,眼中有光,始保熱情。