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。
為什麼?
您需要消除反引號並將單引號更改為雙引號:
#!/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。