适用于 50 多个服务器的 Zenity Shell 菜单,如何保留在服务器菜单中?

适用于 50 多个服务器的 Zenity Shell 菜单,如何保留在服务器菜单中?

我正在尝试制作一个 zenity shell 菜单来管理 50 多个服务器,并希望添加多个自定义功能。例如:- 当服务器出现故障时,我想在其中进行 ssh,然后检查负载、free -m、最后 10 分钟的 apache/nginx 日志、exim 日志、mysql 慢速查询日志等等。我有满足所有这些需求的脚本。

这些服务器有我的 ssh 密钥,因此执行 ssh 没有问题。

我成功登录服务器,但问题是当我通过 ssh 进入服务器时,脚本结束,在退出服务器后,我进入本地计算机的终端,没有脚本,然后我必须再次运行脚本来获取服务器菜单。请告诉我如何留在循环中,我的意思是如何留在服务器菜单中,然后通过 ssh 进入任何服务器,当我从服务器退出时返回到服务器菜单。请帮忙 。我想进一步定制它。

=========== 它的简短脚本可以为大家提供想法。我的原始脚本有所有服务器======

#!/bin/bash
dialog --menu "select" 40 40 5 1 server.hades 2 server.fire 3 server.geb 4 server.isis 5 exit 2> /tmp/a
choice=`cat /tmp/a`
if [ $choice -eq 1 ]
then
ssh 1.2.3.4
fi
if [ $choice -eq 2 ]
then
ssh 2.3.4.5
fi
if [ $choice -eq 3 ]
then
ssh 2.3.3.5
fi
if [ $choice -eq 4 ]
then
ssh 8.3.4.8
fi
if [ $choice -eq 5 ]
then
echo "BIE BIE"
fi

答案1

看起来您想在某个循环中运行脚本,但您错过了循环。最简单的修改可能是这样的修改:

[... the rest of choices ...]
if [ $choice -eq 5 ]
then
  echo "BYE BYE"
  exit
fi
exec $0

如果您选择最后一个选项 (5),这将退出,否则重新执行脚本本身。

或者只是添加一个循环:

while true;
do
  dialog --menu "select" 40 40 5 1 server.hades 2 server.fire 3 server.geb 4 server.isis 5 exit 2> /tmp/a
  choice=`cat /tmp/a`
  if [ $choice -eq 2 ]
  then
    ssh 192.168.187.*
  fi
  [... the rest of choices ...]
  if [ $choice -eq 5 ]
  then
    echo "BIE BIE"
    break
  fi
done

“while”代码对我有用。谢谢。

相关内容