Unix

unix腳本問題

  • June 18, 2010

我有一個在 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。

為什麼?

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

#!/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。

引用自:https://serverfault.com/questions/152494