我正在尝试使用此bash脚本中的第一行格式化时遇到一些问题,该脚本应该在文件中查找#Server行,然后在其下面的行上打印$ newip。 / p>
理想情况下,我希望$ newip看起来像这样:
route 74.125.141.102 255.255.255.255 net_gateway
但是当我尝试运行脚本时,出现问题,因为我得到的就是:
awk: fatal: cannot open file `255.255.255.255' for reading (No such file or directory)
这是我的完整bash脚本:
newip="route $(dig google.com +short | (head -n1 && tail -n1)) 255.255.255.255 net_gateway"
awk -v newip=$newip '{
if($1 == "#Server"){
l = NR;
print $0
}
else if(l>0 && NR == l+1){
print $newip
}
else if(l==0 || NR != l+2){
print $0
}
}' serverip > serverip.tmp
mv -f serverip.tmp serverip
(顺便说一句,如果您想知道这个脚本是用于什么的,它最终将用于为我的OpenVpn配置为某个网站添加例外)
我知道在第一行添加一组额外的引号或括号是愚蠢的,但我无法弄清楚要做什么。
答案 0 :(得分:1)
您需要在newip
命令行中对awk
的引用附加双引号:
awk -v newip="$newip" '{ … }' serverip > serverip.tmp
现在newip
是awk
脚本中的4个字的变量值,可以在显示时打印。