Bash变量语法问题

时间:2016-05-30 02:49:29

标签: bash shell awk scripting

我正在尝试使用此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配置为某个网站添加例外)

我知道在第一行添加一组额外的引号或括号是愚蠢的,但我无法弄清楚要做什么。

1 个答案:

答案 0 :(得分:1)

您需要在newip命令行中对awk的引用附加双引号:

awk -v newip="$newip" '{ … }' serverip > serverip.tmp

现在newipawk脚本中的4个字的变量值,可以在显示时打印。