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

Bash脚本无法遍历全部服务器条目,如何解决?

解决Bash脚本遍历服务器列表只处理第一行的问题

问题原因

脚本仅处理第一行服务器的核心原因是:ssh命令默认会读取标准输入(即给while read提供内容的servers.txt),导致read命令无法获取文件中的第二行内容,循环提前终止。另外脚本里的/dev/nul l多了一个空格,需修正为/dev/null,否则ping的输出无法被正确丢弃。

解决方案

方法1:给ssh添加-n参数

-n参数让ssh从/dev/null读取输入,避免占用while循环的标准输入。修改后的脚本如下:

#!/bin/bash

# Read in server names from a file
while read -r server; do
# Check if server is reachable
if ping -c 1 "$server" &> /dev/null; then 
    echo "Server $server is reachable."
    # Check if mount point exists
    if ssh -n "$server" "[ -d /path/to/mount/point ]"; then
        echo "Mount point exists on server $server."
    else
        echo "Mount point does not exist on server $server."
    fi
else
    echo "Server $server is not reachable."
fi
done < servers.txt

方法2:重定向ssh的输入到/dev/null

若不想用-n参数,可直接将ssh的输入重定向到/dev/null,效果与方法1一致:

#!/bin/bash

# Read in server names from a file
while read -r server; do
# Check if server is reachable
if ping -c 1 "$server" &> /dev/null; then 
    echo "Server $server is reachable."
    # Check if mount point exists
    if ssh "$server" "[ -d /path/to/mount/point ]" < /dev/null; then
        echo "Mount point exists on server $server."
    else
        echo "Mount point does not exist on server $server."
    fi
else
    echo "Server $server is not reachable."
fi
done < servers.txt

方法3:改用for循环读取(适合无特殊字符的服务器列表)

如果服务器列表都是IP地址这类无空格的内容,也可以用for循环读取文件内容,不会被ssh的输入干扰:

#!/bin/bash

# Read in server names from a file
for server in $(cat servers.txt); do
# Check if server is reachable
if ping -c 1 "$server" &> /dev/null; then 
    echo "Server $server is reachable."
    # Check if mount point exists
    if ssh "$server" "[ -d /path/to/mount/point ]"; then
        echo "Mount point exists on server $server."
    else
        echo "Mount point does not exist on server $server."
    fi
else
    echo "Server $server is not reachable."
fi
done

关键说明

优先推荐方法1或方法2,因为while read -r的方式能更好地处理包含空格或特殊字符的服务器名称,比for循环更健壮。同时必须修正/dev/nul l的拼写错误,确保ping命令的输出被正确丢弃,避免不必要的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:01:02