我想通过 ssh 运行一个复杂的脚本
#!/bin/sh
ARRAY1=(
server1s
server123
server12
server14
server13
)
for i in ${ARRAY1[@]};do ssh $i "
case \$HOSTNAME in
server1.domain.com)
echo try1
;;
server12.domain.com)
echo try12
;;
*)
echo try123
;;
esac
问题是 ssh 读取我的内部主机名变量并返回 try123,是否可以读取远程站点的内部变量?我尝试过 \$VARIABLE 和 $VARIABLE 但结果是相同的
答案1
在这种情况下,使用\$HOSTNAME
是转义变量的正确方法。
但是,该变量通常包含主机名(非 FQDN),或者可能未填充。您应该使用该命令hostname -f
来获取服务器 FQDN。
我不知道你的最终脚本会是什么样子,但是连接server1
然后检查该服务器是否server1
可能是某种无用的(出于安全目的)。
您可以编写一些脚本,例如script1.sh
包含
echo "$HOSTNAME / $(hostname -f)"
然后
for i in ${ARRAY1[@]};do
case $i in
server1) ssh $i < script1.sh
;;
server2) ssh $i < script2.sh
;;
*) ssh $i < script_${i}.sh
esac
done
编辑:正如评论中所述,OpenBSD 发布的版本hostname
不理解-f
选项。默认行为是显示 FQDN。