我有包含完整企业主机列表(/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.com
vs. 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)"