无法在shell脚本中使用awk命令进行打印

时间:2017-04-25 04:35:03

标签: linux bash shell awk scripting-language

#!/bin/bash
echo "Number of hosts entered are "$#
echo "Hostnames are "$@
for i in "$@"
do
    echo "Logging in to the host "$i
    pbsh root@$i '
    ipaddr=`ip r | awk '{print $9}'`
    if [ ipaddr = 172.*.*.* ]
    then
        echo "Script can not be run in this IP series"
        exit
    else
        cd /var/tmp ; wget http://**********
    fi'
done

执行上面的脚本后,它会抛出以下错误。脚本正在执行但不是以所需的方式执行。

  

awk:cmd。 line:1:{print

     

awk:cmd。 line:1:^意外的换行符或字符串结尾

我是脚本的新手。如果脚本中有任何错误,请更正我。

1 个答案:

答案 0 :(得分:0)

在您发布的商家信息中,pbsh行中的开头单引号会被单引号关闭,紧接着是awk命令。你可以通过在反斜杠前加上前缀来逃避后者。

如果pbsh也接受从stdin执行的命令,另一种方法是使用HERE文档(参见bash手册页, Here Documents 部分)。

更新:戈登戴维森的评论是正确的。 \'也不起作用。 pbsh坚持要将命令作为单个参数执行,你可以像他建议的那样摆弄引号,或者把pbsh的整个输入放到一个单独的文件中并使用,即

pbsh root@$i $(<input_script.pbsh)