bash 脚本将 2 个随机项写入文件

bash 脚本将 2 个随机项写入文件

我需要一个 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

相关内容