unix腳本問題

unix腳本問題

我有一個在 FreeBSD 機器上運行的簡單腳本,程式碼如下:

#!/bin/sh
`sed -i .bak '\:#start 172.0.0.3:,\:#end 172.0.0.3:d' /usr/local/etc/racoon/racoon.conf`
echo $?

它應該刪除兩個模式之間的文字區塊。

問題是,如果我直接從 shell 執行 sed 命令,它可以工作,如果我運行腳本,回傳碼是 0。

為什麼?

答案1

您需要消除反引號並將單引號變更為雙引號:

#!/bin/sh
ip=$1
echo $ip
sed -i .bak "\:#start ${ip}:,\:#end ${ip}:d" /usr/local/etc/racoon/racoon.conf

使用雙引號將允許擴展變數。反引號將嘗試執行命令的標準輸出(在本例中沒有)。例如,如果您這樣做,`echo hi`它會嘗試將“hi”作為命令執行。sed無論是否進行替換,除非出現錯誤,否則始終傳回 0。

答案2

反引號確實沒有必要(或者也許我理解你錯了)。事實上,腳本回傳 0 也是預期的:退出代碼 0 就可以了。編輯: sed 將始終以 0 退出,即使沒有替換。只有當語法存在錯誤時才會產生另一個退出代碼。

更有趣的是:程式碼到底刪沒刪?

從您的評論來看,您可能遇到正規表示式和/或其中轉義字元的問題。

相關內容