从 /etc/hosts 连接到多个交换机并将多个命令输出导出到文件

从 /etc/hosts 连接到多个交换机并将多个命令输出导出到文件
  1. 实际上,我关心的是如何记录 /etc/hosts 中列出的多个开关,并在每几个命令上运行,并将输出存储到主 Linux 主机上的一个日志文件中。
  2. 第二个问题可能会问如何将IP地址与交换机名称连接起来并为其创建单独的目录并将每个命令日志放在那里。

我看到题目: 如何自动连接到多个网络设备、运行命令并将输出保存到文件中?

但它如何满足我的需求呢?

脚本:

#!/bin/bash
#=================================================================
#       Variables
#=================================================================
DATE=$(date +"%Y%m%d")
DIR=/logs/cisco/$DATE
INPUT=/etc/hosts
count=0
IP=$addr
#=================================================================
# Check if log directory exists
#=================================================================
if [ ! -d $DIR ]; then
    mkdir -p /logs/cisco/$DATE;
fi;
#================================================================
# Main
#================================================================
while read IP
do
sshpass -p ****** ssh admin@$IP 'sho int fa 1/1' > $DIR/int.log
done < <( sed -e '1,/#ETHERNET SWITCHES/d' -e '/#END SWITCHES/,9999d' $INPUT | awk '{print $1}' )

答案1

下面我发送了精简版更新,该更新几乎可以工作,但输出文件是空的,我们仅在屏幕上获取命令输出。如果有人可以帮助如何获取每个文件内的输出。

#!/bin/bash
#=================================================================
# Variables
#=================================================================
DATE=$(date +"%Y%m%d")
DIR=/logs/cisco/$DATE
INPUT=/etc/hosts
SW=$(sed -e '1,/#ETHERNET SWITCHES/d' -e '/#END SWITCHES/,$d' $INPUT | awk '{print $2}')
#=================================================================
# Check if log directory exists
#=================================================================
if [ ! -d "$DIR" ]; then
   mkdir -p /logs/cisco/"$DATE";
fi
echo "$SW" | while IFS= read -r line
 do
  mkdir -p -- "$DIR/$line"
done <<<"$SW"
#================================================================
# Main
#================================================================
for ip in $(cat $INPUT | sed -e '1,/#ETHERNET SWITCHES/d' -e '/#END SWITCHES/,$d' $INPUT | awk '{print $1}')
   do
   for line in $(cat $INPUT | sed -e '1,/#ETHERNET SWITCHES/d' -e '/#END SWITCHES/,$d' $INPUT | awk '{print $2}')
   do
    sshpass -p kkk ssh admin@"$ip" 'sho int fo1/1' > "$DIR/$line"/port.log
   done
done

相关内容