Bash 用于在存储阵列上搜索主机的shell脚本

Bash 用于在存储阵列上搜索主机的shell脚本,bash,ssh,Bash,Ssh,我正在编写shell脚本,它在所有存储阵列(3par)中搜索主机名。我的脚本(1)连接到所有设备(2)运行命令解析主机名(3)将其输出重定向到文件 我的问题是: 我不知道如何在屏幕上输出主机名和 我不能让脚本告诉我,主机在哪台机器上运行 这是我不完整且不太好的剧本。:) pds文本文件包含: us3par1 192.168.3.20 us3par2 192.168.3.21 us3par3 192.168.3.22 我想要的输出应该是: 顺便说一句,我只是一个脚本初学者,所以我非常感谢任何帮

我正在编写shell脚本,它在所有存储阵列(3par)中搜索主机名。我的脚本(1)连接到所有设备(2)运行命令解析主机名(3)将其输出重定向到文件

我的问题是:

  • 我不知道如何在屏幕上输出主机名和
  • 我不能让脚本告诉我,主机在哪台机器上运行
  • 这是我不完整且不太好的剧本。:)

    pds文本文件包含:

    us3par1 192.168.3.20
    us3par2 192.168.3.21
    us3par3 192.168.3.22
    
    我想要的输出应该是:


    顺便说一句,我只是一个脚本初学者,所以我非常感谢任何帮助、评论和建议。:)

    如果我正确理解您的问题,那么以下调整应该可以解决您的问题:

    #!/bin/bash
    read -p "Enter the host: " hostname
    while IFS=' ' read -r -a ip
    do
      foundhost="$(ssh usadmin@${ip[1]} -i ~/.ssh/us3par_rsa hostname 2> /dev/null)"
      if [ "$hostname" = "$foundhost" ]
      then
        echo "This host $hostname is on ${ip[0]}" | tee -a /home/3par/out
      fi
    done < pds
    
    #/bin/bash
    读取-p“输入主机:”主机名
    而IFS=''read-r-a ip
    做
    foundhost=“$(ssh-usadmin@${ip[1]}-i~/.ssh/us3par\u rsa hostname 2>/dev/null)”
    如果[“$hostname”=“$foundhost”]
    然后
    echo“此主机$hostname位于${ip[0]}”tee-a/home/3par/out
    fi
    完成
    • 假设:pds是一个(多行)文本文件,有两列,由空白字符分隔
    • 您想要的输出“此主机us4c11j8a4位于us3par2上”将重定向到
      /home/3par/out
      (以防找到输入的主机名)
    这也有助于:


    阅读shell脚本教程可能比在这里提问更有用。如果没有人可以提问,那么这个门户有什么用。谢谢。非常感谢您的回复。实际上,目标是:1。)一旦连接到乘法数组,它将运行命令“showhost-d”并将其重定向到一个文件。2.)搜索重定向文件上的主机名,如果找到,将其输出到屏幕上。第一:显式调用
    showhost-d
    是否重要?
    hostname
    (在此场景中检索远程主机的主机名)不是选项吗?第二:如果主机名与输入的主机名匹配,那么输出应该是(1)写入文件和(2)打印在屏幕上。显式调用showhost-d是否重要?是,因为没有其他命令可以列出阵列上所有连接的主机。主机名(在此场景中检索远程主机的主机名)不是选项吗?不是,这是一种选择。远程主机不是一个unix机箱,而是一个3par存储阵列,它有自己的第二个可用命令:如果主机名与输入的主机名匹配,则输出应同时(1)写入文件和(2)打印在屏幕上?实际上不需要将其写入文件,但重要的是一旦找到,就在屏幕上打印它。
    #!/bin/bash
    read -p "Enter the host: " hostname
    while IFS=' ' read -r -a ip
    do
      foundhost="$(ssh usadmin@${ip[1]} -i ~/.ssh/us3par_rsa hostname 2> /dev/null)"
      if [ "$hostname" = "$foundhost" ]
      then
        echo "This host $hostname is on ${ip[0]}" | tee -a /home/3par/out
      fi
    done < pds