#!/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:^意外的换行符或字符串结尾
我是脚本的新手。如果脚本中有任何错误,请更正我。
答案 0 :(得分:0)
在您发布的商家信息中,pbsh
行中的开头单引号会被单引号关闭,紧接着是awk
命令。你可以通过在反斜杠前加上前缀来逃避后者。
如果pbsh也接受从stdin执行的命令,另一种方法是使用HERE文档(参见bash手册页, Here Documents 部分)。
更新:戈登戴维森的评论是正确的。 \'
也不起作用。 pbsh坚持要将命令作为单个参数执行,你可以像他建议的那样摆弄引号,或者把pbsh的整个输入放到一个单独的文件中并使用,即
pbsh root@$i $(<input_script.pbsh)