【发布时间】:2020-03-27 12:34:41
【问题描述】:
我有一个如下的小 shell 脚本,用于登录多个服务器,以捕获目标服务器是使用 Redhat 还是 Ubuntu 作为操作系统版本。
#!/bin/ksh
if [ -f $HOME/osver.report.txt ];then
rm -rf $HOME/osver.report.txt
fi
for x in `cat hostlist`
do
OSVER=$(ssh $USER@${x} "cat /etc/redhat-release 2>/dev/null || grep -i DISTRIB_DESCRIPTION /etc/lsb-release 2>/dev/null")
echo -e "$x \t\t $OSVER" >> osver.report.txt
done
但是,如果我尝试添加如下所示的 awk 并且服务器是 redhat 服务器,则上面的脚本可以正常工作...我在 osver.report.txt 中的结果将只显示主机名而没有操作系统版本。我玩过引用,但似乎没有任何效果。
OSVER=$(ssh $USER@${x} "cat /etc/redhat-release | awk {'print $1,$2,$6,$7'} 2>/dev/null || grep -i DISTRIB_DESCRIPTION /etc/lsb-release 2>/dev/null")
如果我按照以下建议更改脚本:
#!/bin/bash
如果 [ -f $HOME/osver.report.txt ];那么 rm -rf $HOME/osver.report.txt 菲
cat hostlist 中的 x
做
操作系统=$(
ssh $USER@${x} bash /dev/null || grep -i DISTRIB_DESCRIPTION /etc/lsb-release 2>/dev/null
EOF
)
echo -e "$x \t\t $OSVER" >> osver.report.txt
完成
然后我收到以下错误: ./test.bash:第 9 行:寻找匹配的 `)' 时出现意外的 EOF ./test.bash:第 16 行:语法错误:文件意外结束
【问题讨论】: