执行方法:
bash number3.sh
直接产生一组3位数字。
bash number3.sh 10
插上10组3位数字。
思路: 可以使用echo $RANDOM获取一个随机数字,然后再除以10,取余获取0-9随机数字,三次运算获得一组。
参考脚本:
{{{密码回复可见}}}
- #!/bin/bash
- tem=$1
- if [ "$tem" = "" ]
- then
- tem = 1;
- fi
- for ((i=1;i<=tem;i++))
- {
- res=$[$RANDOM/900+100];
- echo $res;
- }
- #!/bin/bash
- tem=$1
- if [ "$tem" = "" ]
- then
- tem = 1;
- else
- te=`echo $tem |sed 's/[0-9]//g'`
- if [ "$te" != "" ]
- then
- echo "请填写数字!"
- exit;
- fi
- fi
- for ((i=1;i<=tem;i++))
- {
- res=$[$RANDOM/1000];
- if [ $res -lt 10 ]
- then
- echo "00"$res;
- elif [ $res -lt 100 ]
- then
- echo "0"$res;
- else
- echo $res;
- fi
- }
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
杭州小白 发表于 2016-1-26 14:16
#!/bin/bash
ran(){
c1=$(($RANDOM%10))
{:4_117:}夏夏,你这样是不合适的,这样首位永远不能是0了
你随机出各位之后,直接输出就可以了
#!/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
- #!/bin/bash
- repeat=$1
- if [ "$repeat" == "" ]
- then
- repeat=1
- fi
- for j in `seq 1 $repeat`
- do
- for i in `seq 0 2`
- do
- a[$i]=$[$RANDOM%10];
- done
- if [ ${a[0]} -le 0 ]
- then
- a[0]=1
- fi
- result=$[${a[2]}+$[${a[1]}*10]+$[${a[0]}*100]];
- echo $result
- done
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
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
- #!/bin/bash
- suijishu()
- {
- m=$[ $RANDOM % 10 ]
- # echo $m
- }
-
- sanweishu()
- {
- suijishu
- a=$m
- # echo $a
- suijishu
- b=$[ $m * 10 ]
- # echo $b
- suijishu
- c=$[ $m * 100 ]
- # echo $c
- s=$[ $a + $b +$c ]
- echo $s
- }
- for i in `seq 1 $1`;do
- sanweishu
- done
# 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
}
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
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
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
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
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
#
#
#
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
GaryHuang0113 - 世上无难事,只怕有心人
#!/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
hlymlv 发表于 2016-7-27 18:55
#!/bin/bash
if [ -z $1 ];then
n=$(((RANDOM % 900)+100))
你好,请教你一个问题,关于生成随机的3位数,为什么不直接对1000 取余,而选择先对900取余,而后加100呢? 还有这个脚本并不能保证 可以生成不重复的随机数.
n=$(((RANDOM % 1000)))
##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
标哥 发表于 2016-8-14 09:11
你好,请教你一个问题,关于生成随机的3位数,为什么不直接对1000 取余,而选择先对900取余,而后加100呢 ...
这个是RANDOM的用法,用起来挺简单的 你可以看看 这个会产生相同的数
#!/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
#!/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
#!/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,就无法避免,还请高手指点。
编辑回复