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 

使用双引号将允许variables被扩展。 反引号将尝试执行命令的标准输出(在这种情况下没有)。 例如,如果你使用`echo hi`它会尝试执行“hi”作为命令。 除非出现错误,否则sed总是返回0。

反引号真的没有必要(或者我理解你错了)。 脚本返回0的事实也是预期的:退出码0是OK的。 编辑:即使没有替代,sed将始终以0退出。 只有在语法错误时才会生成另一个退出代码。

更有趣的是:代码是否被删除?

从你的评论来看,你可能有一个正则expression式和/或转义字符的问题。