2014-03-04 20 views
0

我有以下的bash:使用插入在txt文件的行#1变SED

#!/bin/bash 
if ["$#" -ne "1"]; then 
    echo "Usage: `basename $0` <HOSTNAME>" 
    exit 1 
fi 

IPADDR=`ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev` 
sed -i -e '1i$IPADDR $1\' /etc/hosts 

但是,当我cat /etc/hosts

$IPADDR 

我如何处理此类问题?

+1

还有更可靠的方法来提取IP地址,例如请参阅[将IP地址放入bash变量。有没有更好的方法](http://stackoverflow.com/q/6829605/1331399)。 – Thor

+0

谢谢......正确:) – MLSC

回答

3

你的问题是单引号内的变量'没有被shell扩展,但保持不变。要引用要扩展的变量,请使用双引号",或者如果不需要这些引号,则可以省略引号。

sed -i -e '1i'$IPADDR' '$1'\' /etc/hosts 

在上述线$IPADDR$1是报价的外部,并且将壳中的参数正在被进料至sed之前进行扩展。

+0

你知道我还有'$ 1'作为参数......怎么样? – MLSC

+1

@MortezaLSC:同样的模式,让它们在单引号之外,看看我的编辑。 –

+0

谢谢...我会检查它 – MLSC

2

单引号表示字符串不作为变量进行插值。

#!/bin/bash 
IPADDR=$(/sbin/ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev) 
sed -i -e "1i${IPADDR} ${1}" /etc/hosts 

我也在$(...)出的习惯做了命令!

+0

谢谢...一个好方法...我们不会感到困惑.. – MLSC