求shell高人除bug

回复 收藏
脚本模拟霜色球:
  1. #!/bin/bash
  2. #仅供娱乐
  3. echo "出号中"
  4. echo -n "Red Balls:"
  5. for i in $(seq 6)
  6.      do
  7.            sleep 2
  8.         for j in $(($RANDOM%33+1 ))
  9.                       do
  10.                       echo -n "$j "
  11.         done
  12. done
  13. echo
  14. echo -n "Blue Ball:"
  15.         sleep 3
  16. echo "$(($RANDOM%16+1 ))"
脚本执行效果

[root@win7]# sh fucai.sh
出号中
Red Balls:30 6 26 12 28 7
Blue Ball:15



现在有个问题,红色球,会出现重号,要怎么解决?
有个思路,先让红求号码换行输出,然后sort一下,然后unic -c 一下,然后wc -l 一下,看wc结果是不是6,如果小于6,
就循环。


2015-06-22 16:42 举报
已邀请:
0

qidi2015

赞同来自:

shell有一个环境变量RANDOM,范围是0--32767

如果我们想要产生0-25范围内的数:$(($RANDOM%26)) 在$(()) 是可以省略取值的$符号的。
(All tokens in the expression undergo parameter expansion, string expansion, command substitu-tion, and quote removal.)

用这个环境变量对26取模即可。

如果想得到1--68范围内的数 : $(($RANDOM%33+1 ))

如果想得到6--87范围内的数 : $(($RANDOM%82+6 ))
0

阿铭 管理员

赞同来自:

把$j先追加写入到一个临时文件中,每次拿新的$j和该临时文件中的数字比对,使用grep -w  即可
0

大不了从头再来

赞同来自:

#!/bin/bash
echo -n "Red Balls:"
touch temp.ini
for i in $(seq 6)
     do
                a=$(($RANDOM%33+1 ))
                grep -w $a temp.ini 1>/dev/null 2>&1
                while [ $? = 0 ]
                do
                    a=$(($RANDOM%33+1 ))
                    grep -w $a temp.ini 1>/dev/null 2>&1
                done
                echo -n "$a "
                echo "$a" >> temp.ini
     done
echo
echo "Blue Ball:$(($RANDOM%16+1 ))"
rm -rf temp.ini
0

李宁

赞同来自:

get 生成指定范围的随机数

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: