在远程服务器上执行两个命令,并使用shell脚本将输出存储到本地服务器

时间:2013-12-13 04:42:45

标签: linux bash shell scripting

我正在尝试清理我的shell脚本。我正在尝试阅读服务器列表 文本文件“serverlist”并shh每个服务器获取命令的结果并存储到文件“result_segfault”。我成功地为每个服务器做了这个,我想列出服务器的名称和下面的输出:

示例:

-----------------
Servername
-----------------
Output of the command

----------------
Servername2
------------------
Output of the command

这是我的代码

#!/bin/bash


for HOSTNAME in $(cat serverlist);
do

SCRIPT="cat /var/log/messages | grep 'segfault at 0000000000000098'"

for HOSTNAME in ${HOSTNAME} ;
do
ssh ${HOSTNAME} "${SCRIPT}" >"result_segfault"

done;
done

我不知道如何添加服务器名称和分隔符

2 个答案:

答案 0 :(得分:2)

{
echo "----------------"
echo "$HOSTNAME"
echo "----------------"
ssh "$HOSTNAME" "${SCRIPT}"
} >>"result_segfault"

大括号{...}将语句组合在一起,以便可以使用单个重定向收集其标准输出。我用过“>>”取代“>”对于重定向,因为从您的示例中可以看出,您希望将每个主机的结果附加在一起,而不是每次查询新主机时都覆盖它。

答案 1 :(得分:0)

有各种风格修复;

#!/bin/bash

while read HOSTNAME
do
    ssh ${HOSTNAME} grep 'segfault at 0000000000000098' /var/log/messages
done <serverlist >result_segfault