#!/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。行:1:{打印
AWK:CMD。行:1:^意外的换行符或字符串结尾
我是脚本新手。如果剧本有什么问题,请纠正我。

最佳答案

在您发布的列表中,pbsh行中的开头单引号被紧接着awk命令的单引号关闭。你可以通过用反斜杠预先固定它来避免后者。
如果pbsh还接受从stdin执行的命令,另一种方法是使用HERE文档(请参阅bash手册页,HERE文档部分)。
更新:戈登·戴维森的评论是对的。\'也不起作用。pbsh坚持让命令作为一个单独的参数执行,您可以像他建议的那样随意使用引号,或者将pbsh的整个输入放到一个单独的文件中并使用,即。,

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

关于linux - 无法在shell脚本中使用awk命令进行打印,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43601682/

10-11 16:45