如何在Bash脚本中实现随机矩阵生成功能?
如何修改Bash脚本生成随机矩阵
原脚本通过手动输入填充矩阵,要实现随机矩阵生成,只需要把手动读取元素的逻辑替换为自动生成随机数即可,以下是具体修改方案:
修改后的完整脚本
#!/bin/bash # 读取矩阵的行列数 read -p "Give rows and columns: " n # 生成随机矩阵元素 echo "Generated random matrix:" let i=0 while [ $i -lt $n ] do let j=0 # 每行元素按空格分隔输出,方便查看 row="" while [ $j -lt $n ] do # 用Bash内置的$RANDOM生成0-32767的随机数,取模100得到0-99的数 random_num=$((RANDOM % 100)) x[$((n*$i+$j))]=$random_num row="$row $random_num" j=$(($j+1)) done # 打印当前行,去掉开头的空格 echo "${row# }" i=$(($i+1)) done
关键修改点说明
- 替换原脚本的
read x[...]为随机数赋值:用Bash内置变量$RANDOM直接生成随机数,默认范围是0-32767。如果需要自定义范围,比如生成1-50的整数,改成random_num=$((1 + RANDOM % 50))即可(% 50得到0-49,加1后变为1-50)。 - 新增矩阵输出逻辑:原脚本仅将元素存入数组,修改后会逐行打印生成的随机矩阵,方便直观查看结果。
可选优化:支持非方阵
如果需要支持行列数不同的矩阵(非方阵),可以修改读取行列的逻辑,分别读取行数和列数:
# 替换原读取行列的代码 read -p "Give rows: " rows read -p "Give columns: " cols
然后循环条件和数组索引计算对应改为rows和cols:
let i=0 while [ $i -lt $rows ] do let j=0 row="" while [ $j -lt $cols ] do random_num=$((RANDOM % 100)) x[$((cols*$i+$j))]=$random_num row="$row $random_num" j=$(($j+1)) done echo "${row# }" i=$(($i+1)) done
内容的提问来源于stack exchange,提问作者sorinsagara
相关产品推荐
相关产品推荐

