linux - 如何在 3 行中生成随机数 - Linux Shell 脚本

标签 linux bash shell random

我想写一个代码,可以生成 3 行,每行 6 个随机数,这些随机数在给定时间(0.5 秒)后随机播放,并且没有创建新行,基本上 6 个随机数在 3 行中不断生成。 到目前为止我的代码是:

echo " "

echo " "

echo " "



for i in {1..5};

do

for i in {1..1};

do


echo -ne " $(($RANDOM % 100))   $(($RANDOM % 100))   $(($RANDOM % 100))   $(($RANDOM % 100))   $(($RANDOM % 100))   $(($RANDOM % 100))\r"


done

sleep 0.5

done

但是,当我尝试向其中添加第二行和第三行时,它似乎并没有按照我想要的方式工作。示例输出可能如下所示:

45 88 85 90 44 22

90 56 34 55 32 45

58 99 42 10 48 98

在这些数字之间,将生成新的数字,只保留 6 列和 3 行。我也尝试过制作矩阵,但它对我不起作用。

最佳答案

我不知道你是否完成了它,但是从评论继续,我会用 1-100 之间的随机值填充一个索引数组,例如

#!/bin/bash

for ((i = 0; i < 18; i++)); do      ## fill array with random values
    a[i]=$(($RANDOM % 100 + 1))
done

然后你想要的是一个你可以调用的函数,传递每行中值的数量(这样你就可以在打印这些数字后输出 '\n'),然后是数组值作为函数的参数读取到函数内的本地数组(当然,您可以只使用原始数组而不必担心将元素作为参数传递,但我更喜欢在函数内使用 local 值来保存其他范围内的值不变。为此,您的打印功能可能类似于:

## function to print array in shuffled order, using tput for cursor control
prnarray() {
    local n=$1
    local al=( ${@:2} )
    local c=0
    for i in $(shuf -i 0-$((${#al[@]} - 1))); do
        [ "$c" -gt '0' -a $((c % n)) -eq '0' ] && printf "\n"
        printf " %3d" "${al[i]}"
        ((c++))
    done
    printf "\n"
    tput cuu 6   ## tput is used for cursor control to move back to top
}

那么你真的不需要太多其他的了,只需要一个循环来打印数组,sleep 一段时间,然后再次调用 prnarray 来覆盖输出新的洗牌例如

tput sc     ## save cursor position

## call prnarray 3 times with 5 sec. delay between displays
declare -i c=0
while (( c < 3 )); do
    prnarray 3 ${a[@]}
    ((c++))
    sleep 5
done

tput rc     ## restore cursor position

示例使用/输出

数组将每 5 秒打印一次相同的位置,并将相同的元素随机排列到数组中的不同位置。

$ sh randomshuf.sh
  33  30  34
  86  98  48
  94  89  80
  50  57  34
  11  45  57
  80  42  22

试一试,如果您有任何问题,请告诉我。

注意:要使其成为 3x6,请更改行:

 tput cuu 3

prnarray 6 ${a[@]}

随着那些改变你的输出将类似于:

$ sh randomshuf.sh
  85   9  45  14  18  16
   6  59  43  19  29  58
   7  89  18  72  29  29

关于linux - 如何在 3 行中生成随机数 - Linux Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43462892/

相关文章:

linux - bash 空变量命令替换导致单引号

shell - 在每个文本文件的顶部和底部添加新行

c - Linux | C 中的 Shell 实现 |输入重定向不显示

c - C中的暂停功能不响应回车键

c - 如何使用popen同时输入和输出?

asp.net 应用程序调用服务说它未初始化?

linux - 对 3 列进行排序并求平均值

php - 重新声明功能适用于旧服务器但不适用于新服务器

bash - 在 shell 脚本中添加计数器

linux - 查找子目录中的所有符号链接(symbolic link)