我在格式化我正在尝试处理的这个 bash 脚本中的第一行时遇到了一些问题,它应该在文件中查找 #Server 行,然后在它下面的行上打印$newip。
理想情况下,我希望$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配置添加某个网站的例外)
我知道这是愚蠢的事情,比如在第一行添加一组额外的引号或括号,但我不知道该怎么做。
您需要在
awk
命令行中对newip
的引用两边加上双引号:
awk -v newip="$newip" '{ … }' serverip > serverip.tmp
现在newip
是awk
脚本中的一个 4 字变量值,可以在显示时打印。