我需要一个 bash 脚本来从列表中选择 2 个随机名称服务器。这是我所拥有的但不起作用的脚本 - 我收到一条错误信息"$(($RANDOM % ${SIZE}))"
,但我不知道原因。
NAMESERVERS="x.x.x.x x.x.x.x x.x.x.x x.x.x.x"
SIZE=${#NAMESERVERS[@]}
# select 2 random entries
NS_IDX=$(($RANDOM % ${SIZE}))
NS_IDX2=${NS_IDX1}
while [ "${NS_IDX1}" == "${NS_IDX2}" ]
do
NS_IDX2=$(($RANDOM % ${IDX_RANGE}))
done
NS_IP1=${NAMESERVERS[${NX_IDX1}]}
NS_IP2=${NAMESERVERS[${NX_IDX2}]}
然后我将 NS_IP1 和 NS_IP2 回显到 /etc/resolv.conf
答案1
如果您可以使用 GNU,shuf
那么一个简单的方法是:
#!/bin/sh -
<<EOF shuf -n 2
nameserver 8.8.8.8
nameserver 4.4.4.4
nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 9.9.9.9
nameserver 208.67.222.222
EOF
我在 shell 代码中嵌入了一个名称服务器示例列表作为此处的文档。如果您想要将代码与数据分开,请将列表另存为,nameservers
然后:
<nameservers shuf -n 2
异或
shuf -n 2 nameservers
上述每个命令都非常简单,熟悉的人shuf
甚至可能更喜欢按需输入它,而不是创建脚本。
/etc/resolv.conf
如果这是您想要的,请将输出重定向到。使用这个技巧tee
如果你需要sudo
。例如:
# WARNING! This will overwrite your resolv.conf
<nameservers shuf -n 2 | sudo tee /etc/resolv.conf