You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复Bash脚本中for循环+if语句批量检查多服务器目录的异常

问题分析与解决

原脚本的核心问题是:目录存在性检查是在本地执行的,并非目标远程服务器。所以会把本地的目录状态错误当成所有远程服务器的状态,导致后续服务器的判断完全失真。

修正后的脚本

#!/bin/bash

host=(server1 server2)
HOME_PATH="/opt/test"

for my_hosts in "${host[@]}"
do
    echo "处理服务器: $my_hosts"
    # 在远程服务器执行目录检查与创建逻辑
    ssh -o "StrictHostKeyChecking no" root@${my_hosts} << EOF
if [ ! -d "$HOME_PATH" ]; then
    mkdir -p "$HOME_PATH"
    echo "$HOME_PATH 已创建"
else
    echo "$HOME_PATH 目录已存在"
fi
EOF
done

关键修改点

  • 把判断逻辑移到远程执行:通过Here Document(<< EOF)将整个检查、创建逻辑传给远程服务器,确保所有操作都是在目标机器上完成的,获取的是远程真实的目录状态。
  • 修正循环引号:原脚本里for my_hosts in \"${host[@]}\"的转义引号完全多余,直接用"${host[@]}"就能正确遍历数组元素,避免空格或特殊字符导致的拆分问题。
  • 统一变量引号:给HOME_PATH赋值时加上双引号,远程命令里的变量也用双引号包裹,防止路径包含特殊字符时出错。
  • 增加服务器标识输出:让输出更清晰,明确当前处理的是哪台服务器。

内容的提问来源于stack exchange,提问作者Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 07:40:31