Linux Shell 中可用数组存储服务器 IP 列表,支持一次性赋值、逐个索引赋值或 declare 显式声明;推荐用 "${ips[@]}" 安全遍历,并用 mapfile -t 从文件动态加载。

在 Linux Shell 脚本中,用数组变量存储服务器 IP 列表既简洁又实用,特别适合批量管理、循环探测或配置分发等场景。Bash 原生支持普通数组(索引从 0 开始),操作直观,无需额外依赖。
定义 IP 数组的几种常用方式
你可以按需选择最顺手的一种:
- 一次性直接赋值(推荐): ips=("192.168.1.10" "10.0.2.5" "172.16.0.100")
-
逐个索引赋值:
ips[0]="192.168.1.10"
ips[1]="10.0.2.5"
ips[2]="172.16.0.100" - 用 declare 显式声明(语义更清晰): declare -a ips=("192.168.1.10" "10.0.2.5")
安全访问和遍历 IP 元素
避免下标越界或空数组出错,建议用标准写法:
- 获取某个 IP:echo "${ips[0]}"(加双引号防空格截断)
- 获取全部 IP(空格分隔):echo "${ips[@]}"
- 获取数组长度:echo "${#ips[@]}"
- 安全遍历(推荐):
for ip in "${ips[@]}"; do
ping -c1 -W1 "$ip" &>/dev/null && echo "$ip up" || echo "$ip down"
done
动态构建 IP 数组(比如从文件读取)
若 IP 来自配置文件(如每行一个 IP),可用命令替换生成数组:
- 从文件加载:mapfile -t ips (自动去掉换行符)
- 过滤注释与空行后加载:
ips=($(grep -vE '^[[:space:]]*#|^[[:space:]]*$' ip_list.txt)) - 验证是否加载成功:printf "Loaded %d IPs: %s\n" "${#ips[@]}" "${ips[*]}"
注意事项
数组是 Bash 特性,不是所有 shell(如 dash/sh)都支持。确保脚本开头写 #!/bin/bash;生产脚本中建议加判空逻辑,例如:
if [ ${#ips[@]} -eq 0 ]; then echo "No IPs defined"; exit 1; fi


















