Shell指令碼之反引號 和

2022-04-01 16:46:34 字數 1344 閱讀 5531

今天在搞監控的時候,修改乙個老指令碼,主要是通過對作業系統進行判斷來獲取不同的監控引數。(獲取top引數在不同作業系統上也有個坑,會在另外一篇裡面寫)

指令碼如下,非常簡單:

#處理centos7採集磁碟使用率問題

os_version=`cat /etc/issue|grep -w "\\\s"|wc -l`

if [ $os_version -eq 1 ];then

echo $os_version

else

echo 'aaa'

fi

本來邏輯和語法都非常簡單,沒想到結果卻出人意料。

我只是希望通過issue判斷系統是否為centos7,如果是,則輸入\s;如果不是,則輸出『aaa』.

但是發現不管是在centos7還是centos6上,結果都是輸出aaa。

centos7上:

centos6上:

那到底是什麼原因呢?

經過-x輸出檢視,發現結果都是出乎意料的2。因為結果是全部匹配,所以沉思許久還是不得其解。而且我也考慮到了特殊符號的轉義問題,那又是還有其他什麼問題呢?

因為在shell中執行命令並賦值給變數有兩種方式,另外一種方式是用$(),例如a=$(cat /etc/issue).那就用第二種方式測試一下吧。

1、將指令碼修改:

os_version=$(cat /etc/issue|grep -w "\\\s"|wc -l) #修改成$()方式

if [ $os_version -eq 1 ];then

echo $os_version

else

echo 'aaa'

fi

2、在不同環境測試,發現結果正確了!

看來問題就出在反引號上!

既然知道了是反引號的問題,解決辦法就有了。我們先測試一下:

已經毫無疑問了,正是反引號的問題。那麼反引號和$()有什麼區別呢?

發現使用反引號時,需要將轉義符再次進行轉義!!

從上面整個過程我們可以看出:

$()中則不需要考慮\的問題,與我們平常使用的一樣:\ = \。且自己轉義後,他還是識別轉義符。

反引號是老的用法,$()是新的用法,我們推薦使用$()。

shell指令碼中的反引號,單引號,雙引號與反斜槓

反引號位 經常被忽略,而且容易與單引號弄混。它位於鍵盤的tab鍵的上方 1鍵的左方。單引號 位於enter鍵的左方。在linux中反引號起著命令替換的作用。命令替換是指shell能夠將乙個命令的標準輸出插在乙個命令列中任何位置,將反引號中的字串做為命令來執行,我們在用shell程式設計時經常用的到,...

Shell單引號,雙引號,反引號,反斜槓

shell單引號,雙引號,反引號,反斜槓 shell可以識別4種不同型別的引字符號 單引號字元 雙引號字元 反斜槓字元 反引號字元 1.單引號 grep susan phonebook susan goldberg 403 212 4921 susan topple 212 234 2343 如果我...

shell 指令碼中雙引號 單引號 反引號 的區別

在shell中引號分為三種 單引號,雙引號和反引號。單引號 由單引號括起來的字元都作為普通字元出現。特殊字元用單引號括起來以後,也會失去原有意義,而只作為普通字元解釋。例如 string path echo string path 可見 保持了其本身的含義,作為普通字元出現。雙引號 由雙引號括起來的...