写一个脚本产生随机3位的数字

回复 收藏
写一个脚本产生随机3位的数字,并且可以根据用户的输入参数来判断输出几组。 比如,脚本名字为 number3.sh。
执行方法:
bash  number3.sh  
直接产生一组3位数字。
bash number3.sh 10  
插上10组3位数字。

思路: 可以使用echo $RANDOM获取一个随机数字,然后再除以10,取余获取0-9随机数字,三次运算获得一组。

参考脚本:
{{{密码回复可见}}}


2016-01-26 10:34 举报
已邀请:
0

boy461205160

赞同来自:

沙发
0

大漠之烟

赞同来自:

{:4_91:}
0

maria

赞同来自:

  1. #!/bin/bash

  2. tem=$1
  3. if [ "$tem" = "" ]
  4. then
  5.     tem = 1;
  6. fi

  7. for ((i=1;i<=tem;i++))
  8. {
  9.   res=$[$RANDOM/900+100];
  10.   echo $res;
  11. }
0

369666951

赞同来自:

看看思路
0

maria

赞同来自:

修改
  1. #!/bin/bash

  2. tem=$1
  3. if [ "$tem" = "" ]
  4. then
  5.     tem = 1;
  6. else
  7.     te=`echo $tem |sed 's/[0-9]//g'`
  8.     if [ "$te" != "" ]
  9.     then
  10.         echo "请填写数字!"
  11.         exit;
  12.     fi
  13. fi

  14. for ((i=1;i<=tem;i++))
  15. {
  16.     res=$[$RANDOM/1000];
  17.     if [ $res -lt 10 ]
  18.     then
  19.         echo "00"$res;
  20.     elif [ $res -lt 100 ]
  21.     then
  22.         echo "0"$res;
  23.     else
  24.         echo $res;
  25.     fi
  26. }
0

杭州小白

赞同来自:

#!/bin/bash
ran(){
   c1=$(($RANDOM%10))
   c2=$(($RANDOM%10))
   c3=$(($RANDOM%10))
if [ $c3 -gt 0  ]
then
   d=$(($c3*100+$c2*10+$c1))
else
   c3=$(($c3+1))
   d=$(($c3*100+$c2*10+$c1))
fi
   echo $d
}
for i in `seq 1 $1`
do
  ran $1
done
0

maria

赞同来自:

杭州小白 发表于 2016-1-26 14:16
#!/bin/bash
ran(){
   c1=$(($RANDOM%10))

{:4_117:}夏夏,你这样是不合适的,这样首位永远不能是0了
你随机出各位之后,直接输出就可以了
0

杭州小白

赞同来自:

maria 发表于 2016-1-26 14:24
夏夏,你这样是不合适的,这样首位永远不能是0了
你随机出各位之后,直接输出就可以了

首位是0·····有这样的3位数吗{:4_99:}
0

杭州小白

赞同来自:

杭州小白 发表于 2016-1-26 14:38
首位是0·····有这样的3位数吗

这样就变成等宽数了{:4_93:}
0

maria

赞同来自:

杭州小白 发表于 2016-1-26 14:38
首位是0·····有这样的3位数吗

要求的不是三位数,是三位的数字,自己去看上面阿铭老师给我的回复,我第一次也做的是三位数啊
0

杭州小白

赞同来自:

本帖最后由 杭州小白 于 2016-1-26 15:00 编辑

铭哥的思路是输出数组,然后用sed将空位除去啊
0

杭州小白

赞同来自:

maria 发表于 2016-1-26 14:42
要求的不是三位数,是三位的数字,自己去看上面阿铭老师给我的回复,我第一次也做的是三位数啊

看到了  铭哥的要求是等宽三位数
0

maria

赞同来自:

杭州小白 发表于 2016-1-26 14:53
铭哥的思路是输出数组,然后用sed将空位除去啊?等宽3位数?

不是,他是每一个数字随机输出,然后组合
sed那是判断输入的参数的
0

qidi2015

赞同来自:

写了一个,没判断$1是非数字的情况

#!/bin/bash
[  $# -eq 0 ] && mkpasswd  -d 3  -s 0|sed 's/[^0-9]//g' && exit

for i in $(seq $1)
  do
   mkpasswd  -d 3  -s 0|sed 's/[^0-9]//g'
  done


执行效果:

[root@qq ~]# sh weishu.sh 20
253
349
652
438
524
182
328
165
189
538
047
628
092
085
534
414
430
510
264
424

0

初秋飞马

赞同来自:

  1. #!/bin/bash
  2. repeat=$1
  3. if [ "$repeat" == ""  ]
  4. then
  5. repeat=1
  6. fi
  7. for j in `seq 1 $repeat`
  8. do
  9.     for i in `seq 0 2`
  10.     do
  11.         a[$i]=$[$RANDOM%10];
  12.     done
  13.     if [ ${a[0]} -le 0 ]
  14.     then
  15.     a[0]=1
  16.     fi
  17.     result=$[${a[2]}+$[${a[1]}*10]+$[${a[0]}*100]];
  18.     echo $result
  19. done
0

初秋飞马

赞同来自:


首位是1的概率增加了。。。这样不知道算不算随机数了。。。
0

奋斗的种子

赞同来自:

#!/bin/bash
while :
do
    read -p "请输入一个数字:" n
    tag=`echo $n |sed 's/[0-9]//g'`
    if [ ! -z $tag ]
    then
        echo "请输入纯数字!"
        continue
    fi
    break
done
i=1
while [ $i -le $n ]
do
    n1=$RANDOM
    if [ $n1 -ge 100 ] && [ $n1 -le 999 ]
    then
        echo -ne "$n1 "
    else
        continue
    fi
    i=$[$i+1]
done
echo
0

tonyklose

赞同来自:

参考参考
0

KICAZ629

赞同来自:

aa
0

落涧飞鹰

赞同来自:

看看
0

inzaghidai

赞同来自:

参考一下
0

thedawn

赞同来自:

1
0

riluozhiyue

赞同来自:

学习
0

郭贞

赞同来自:

看看看
0

snake

赞同来自:

看看
0

奇怪的蔬菜

赞同来自:

#!/bin/bash
a=`date|md5sum`
echo ${a:1:3}
======分割线========
没看清需求,原来只要数字啊,我以为是字符。。。
0

HwangChen

赞同来自:

look
0

hhx012

赞同来自:

瞅瞅
0

Edison

赞同来自:

先学习下
0

alvinnull

赞同来自:

shafa
0

xteplinux

赞同来自:

{:4_91:}
0

蔡炳森

赞同来自:

#!/bin/bash

read -p "输入你要产生随机数的组数:" x
read -p "输入你要产生随机数的个数:" y
for i in `seq 1 $x`
do
  for j in `seq 1 $y`
  do
    arry[$j]=$[$RANDOM%9]
    printf ${arry[$j]}
  done
   echo  ""
done
该脚本可以输入用户想要随机数的位数和组数。
[root@153 ~]# sh numbers.sh
输入你要产生随机数的组数:5
输入你要产生随机数的个数:4
0867
3871
2481
2261
0638
0

木头爱木头媳妇

赞同来自:

2
0

malong

赞同来自:

看看
0

we14578

赞同来自:

思路都没有 好急
0

小璇Linux

赞同来自:

学习
0

shoswj001

赞同来自:

echo
0

漠林sky

赞同来自:

学习
0

wangzai

赞同来自:

学习
0

shoswj001

赞同来自:

。。
0

自己定义

赞同来自:

  1. #!/bin/bash
  2. suijishu()
  3. {
  4.         m=$[ $RANDOM % 10 ]       
  5. #        echo $m
  6. }
  7.        
  8. sanweishu()
  9. {
  10.         suijishu
  11.         a=$m
  12. #        echo $a
  13.         suijishu
  14.         b=$[ $m * 10 ]
  15. #        echo $b
  16.         suijishu
  17.         c=$[ $m * 100 ]
  18. #        echo $c
  19.         s=$[ $a + $b +$c ]
  20.         echo $s
  21. }

  22. for i in `seq 1 $1`;do
  23.         sanweishu
  24. done
0

自己定义

赞同来自:


好吧,我以为是产生随机的三位数{:4_102:}
0

m.chang

赞同来自:

语法没有记熟。:(
0

m.chang

赞同来自:

本帖最后由 m.chang 于 2016-4-26 19:45 编辑

# sh 3_产生3位随机数.sh  3
9 6 0
2 0 8
5 1 6

get_numbers() {     
    for i in 1 2 3; do         
        a[$i]=`get_a_num`     
    done     
    temp=`echo ${a[@]} | sed 's/ //g'`     
    echo $temp
}
0

duyanbin

赞同来自:

#!/bin/bash

if [  $# -ne 1 ] ; then
        echo "Usage: random.sh number"
        exit 1
elif  [[ ! $1 =~ ^[0-9]+$ ]] ; then
        echo "Argument must be a number"
        exit 2
fi

n=$1

for ((i=1;i<=$n;i++)); do
        for ((k=1;k<=3;k++)) ; do  
                echo $((RANDOM%10))  
        done | xargs | tr -d ' '
done

0

SunyBome

赞同来自:

答案
0

阿凯

赞同来自:

if [ -z $1 ]
then
          a=$[$RANDOM%10]
          b=$[$RANDOM%10]
          c=$[$RANDOM%10]
          d=$a$b$c
          echo "$d"
else
        for l in `seq 1 $1`
        do
          a=$[$RANDOM%10]
          b=$[$RANDOM%10]
          c=$[$RANDOM%10]
          d=$a$b$c
          echo "$d"
        done
fi
0

qq895933723

赞同来自:

kankan
0

vb3328998

赞同来自:

1
0

hazhuer

赞同来自:

xuexi
0

licengceng

赞同来自:

学习
0

branttsai

赞同来自:

study,tks
0

xzzlamp

赞同来自:

11
0

等风来

赞同来自:

学习
0

mind_sky

赞同来自:

学习
0

ggangelo

赞同来自:

#!/bin/bash
num=$1    #定义并控制用户输入
if [ -z $num ]
then
     num=1
else
    tm=`echo $num|sed 's/[0-9]//g'`
    if [ -n $tm ]
    then
      echo "please input number: "
     exit 1
    fi
fi
###用seq来定位要输出的位数
for i in `seq 1 $num`
do
g=$[RANDOM%10]
s=$[RANDOM%10]
b=$[RANDOM%10]
[ $g -eq 0 ] || g=$[g*100]
[ $s -eq 0 ] || s=$[s*10]
[ $b -eq 0 ] || b=$[b*1]
jg=$[g+s+b]
##如果前前两位为0就需要补位
  if [ $jg -lt 10 ]
   then
     echo  "00$jg"
  elif [ $jg -lt 100 ]
   then
     echo  "0$jg"
  else
     echo "$jg"
   fi
done
exit 0
0

elvis

赞同来自:

ddd
0

十月鱼

赞同来自:

学习
0

monga

赞同来自:

老师 学习
0

583938282

赞同来自:

我最近也在研究随机数,假如会生成三组,怎么去除重复呢?
0

jayden-zeng

赞同来自:

没思路
0

hlymlv

赞同来自:

#!/bin/bash
if [  -z $1 ];then
n=$(((RANDOM % 900)+100))
echo $n
else
for i in `seq 1 $1`
do
n=$(((RANDOM % 900)+100))
echo $n
done
fi
0

jayden-zeng

赞同来自:

#!/usr/bin/python

import sys
import random
if len(sys.argv[1:])==0:
        print(random.randint(100, 999))
else:
        b=1
        a=int(sys.argv[1])
        while b<=a:
                print(random.randint(100, 999))
                b+=1
0

wy1112980

赞同来自:

#!/bin/bash
#
#
#
c=$[$1+1]
a[$i]=`echo $(($RANDOM%999+100))|cut -c 1-3`

for ((i=0;i<($c-1);++i));do
   a[$i]=`echo $(($RANDOM%999+100))|cut -c 1-3`
done

echo ${a
  • }
  • 0

    googleqicq

    赞同来自:

    dd
    0

    luckytodd

    赞同来自:

    AAA
    0

    GaryHuang0113 - 世上无难事,只怕有心人

    赞同来自:

    本帖最后由 GaryHuang0113 于 2016-8-12 09:23 编辑

    #!/bin/bash

    count=$1
    if [ ! -n "$count" ]
    then
       count=3 ;
    fi

    tmp=`echo $count | sed 's/^[0-9]*$//g'`

    if [ -n "$tmp" ]
    then
      echo 'Input is Not Number'
      exit 1;
    fi

    for((i=0;i<$count;i++))
    do
       echo $[$RANDOM%10]$[$RANDOM%10]$[$RANDOM%10]
    done

    0

    wy1028

    赞同来自:

    {:4_99:}
    0

    标哥

    赞同来自:

    hlymlv 发表于 2016-7-27 18:55
    #!/bin/bash
    if [  -z $1 ];then
    n=$(((RANDOM % 900)+100))

    你好,请教你一个问题,关于生成随机的3位数,为什么不直接对1000 取余,而选择先对900取余,而后加100呢? 还有这个脚本并不能保证 可以生成不重复的随机数.
    n=$(((RANDOM % 1000)))
    0

    十月鱼

    赞同来自:

    #!/bin/bash
    ##by xingcheng
    ##2015/8/15
    read -p "Please enter you want to get a set of numbers" I
    while [ $I -gt 0 ]
    do
    a=$[$RANDOM%10]
    b=$[$RANDOM%10]
    c=$[$RANDOM%10]
    I=$[$I-1]
    echo $a$b$c
    done
    0

    陈秋明

    赞同来自:

    look
    0

    15812926028

    赞同来自:

    look
    0

    且听风吟

    赞同来自:

    学习
    0

    13805775620

    赞同来自:

    学习学习
    0

    hlymlv

    赞同来自:

    标哥 发表于 2016-8-14 09:11
    你好,请教你一个问题,关于生成随机的3位数,为什么不直接对1000 取余,而选择先对900取余,而后加100呢 ...

    这个是RANDOM的用法,用起来挺简单的 你可以看看 这个会产生相同的数
    0

    ChrisLinux

    赞同来自:

    循环三次 $RANDOM % 10 每次剩10的n次方;for (n=0;n<4;++n),然后把每次结果相加。后面的参数控制总体循环次数。不会写脚本,基本想法就这些{:4_99:}
    0

    hmh

    赞同来自:

    a
    0

    linuxcp

    赞同来自:

    {:4_91:}
    0

    kevinjin

    赞同来自:

    #!/bin/bash

    random() {

    i=0

    while [ $i -lt 3 ]

    do

        num=`echo $RANDOM`

        m=$[$num]

        echo -n "$m"

        i=$[$i+1]

    done

    }

    g=0

    while [ $g -lt "$1" ]

    do

        if [ $1 -eq 0 ]

        then

            echo

            exit

        else

            echo `random`

            g=$[$g+1]

        fi

    done

    0

    若尘fj

    赞同来自:

    学习

    0

    kw是id

    赞同来自:

    并且可以根据用户的输入参数来判断输出几组    这个实在想不出了

    0

    hch735347147

    赞同来自:

    学习

    0

    大雁

    赞同来自:

    看看

    0

    王斌

    赞同来自:

    #!/bin/bash

    #Auth: Cityzen Wang

    #Scripts: Echo random number

    for i in `seq 1 $1`

    do

        b1=$(($RANDOM))

        b2=$(($RANDOM))

        b3=$(($RANDOM))

        c=$[$b1*100 + $b2*10 + $b3]

        echo $c

    done

    0

    王斌

    赞同来自:

    #!/bin/bash

    #Auth: Cityzen Wang

    #Scripts: Echo random number

    function get_number() {

        n=$[$RANDOM]

    }

    function check_zero() {

        if [ $n -eq 0 ]; then

            n=$[$RANDOM] 

        fi

    }

    for i in `seq 1 $1`

    do

        get_number

        check_zero

        a=$[$n*100]

        get_number

        check_zero

        b=$[$n*10]

        get_number

        check_zero

        c=$[$a+$b+$n]

        echo $c

    done

    这个可以在一定程度上避免出现两位数,但如果随机出现的数字,连续两次取余数都是 0,就无法避免,还请高手指点。

    0

    杨银根

    赞同来自:

    #!/bin/bash

    n=`curl -I www.baidu.com|grep HTTP|awk '{print $2}'`

    while :

    do

        if [ $n -ne 200 -o $n -ne 301 -o $n -ne 302 ];then

            echo "网站不正常"  >mail.txt |mail "网站错误" 122222@163.com

        fi

        sleep 60

    done

    回复帖子,请先登录注册

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