AlmaLinux中实现循环生成不同随机名称记录的问题
解决bash脚本生成重复随机单词的问题
问题分析
你当前的代码中,local word=$(sort -R names.list | head -1)是在while循环外部执行的,这意味着这个随机单词只会生成一次,后续循环会一直复用这个值,所以所有记录的单词都相同。另外代码里还有两个小问题:
Local是拼写错误,bash的局部变量关键字是小写的local- 原循环的
INPUT_NUMBER值没有变化,会导致无限循环,因为循环条件[[ 1 -le $INPUT_NUMBER ]]永远成立
修改方案
把随机单词的生成逻辑移到while循环内部,让每次循环都重新获取一个新的随机单词,同时修正循环的计数逻辑:
local INPUT_NUMBER=${2} # 初始化计数器i local i=1 while [[ $i -le $INPUT_NUMBER ]] do # 每次循环都重新生成随机单词 local word=$(sort -R names.list | head -1) create_record "${word}" "${Domain}" # 计数器自增 ((i++)) done
补充说明
- 如果你更习惯类似Java的for循环写法,bash也支持:
local INPUT_NUMBER=${2} for ((i=1; i<=INPUT_NUMBER; i++)) do local word=$(sort -R names.list | head -1) create_record "${word}" "${Domain}" done
- 用
"${word}"和"${Domain}"加双引号是为了避免变量值包含空格时出现语法错误,这是bash脚本的最佳实践。
内容的提问来源于stack exchange,提问作者JJJ
相关产品推荐
相关产品推荐

