用于检查多个文件路径中输入是否存在的 case 语句语法

用于检查多个文件路径中输入是否存在的 case 语句语法

我有包含完整企业主机列表(/home/completehostlistcheck.txt)的输入列表。根据它所在的环境(比较dev=/home/dev.txt和 的输入prod=/home/prod.txt)运行echo并说出它所在的环境。问题是 case 语法不起作用

#!/bin/bash

dev=/home/dev.txt
prod=/home/prod.txt

for host in $(</home/completehostlistcheck.txt) 
do 
ssh $host

chk=$hostname
  case "$chk" in
dev) echo "this is dev"
;;
prod) echo "this is prod"
;;

esac 
done

答案1

如果您知道开发主机和生产主机之间的差异,或者有一个简单的命名约定(例如dev.example.comvs. prod.example.com),那么这可能很简单:

for host in $(</home/completelistlistcheck.txt); do
    case "$(ssh $host hostname)" in
        *dev*)
            env="development"
            break
            ;;
        *prod*)
            env="production"
            break
            ;;
        *)
            env="non-categorized"
            break
            ;;
    esac
    echo "$host is a $env host."
done

如果每个主机上都有一个您需要解析其内容的文件,请使用cat /path/to/file而不是hostname在命令运行中通过ssh.

答案2

有几个问题:

主机名

除非您的登录确保此变量存在,hostname否则您应该使用以下命令:

chk=$(hostname)

SSH

ssh $host只需登录并等待终端输入即可。退出后执行以下命令ssh。您必须向调用添加命令ssh。将所有case内容传递给它会有点多,ssh但据我了解,您只需要以下结果hostname

chk="(ssh "$host" hostname)"

相关内容