shell脚本随机数
⑴ shell生成随机数的几种方法
(1)通过内部系统变量($RANDOM)
#!/bin/bash
function rand(){
min=$1
max=$(($2-$min+1))
num=$(($RANDOM+1000000000)) #增加一个10位的数再求余
echo $(($num%$max+$min))
}
rnd=$(rand 400000 500000)
echo $rnd
exit 0
(2)使用awk的随机函数
awk 'BEGIN{srand();print rand()*1000000}' #可以加上if判断,779644
(3)openssl rand产生随机数
openssl rand 用于产生指定长度个bytes的随机字符。-base64或-hex对随机字符串进行base64编码或用hex格式显示。
openssl rand -base64 8 | md5sum | cut -c1-8 #八位字母和数字的组合,3a61800e
openssl rand -base64 8 | cksum | cut -c1-8 #八位数字,10784736
(4)通过时间获得随机数(date)
date +%s%N #生成19位数字,1287764807051101270
date +%s%N | cut -c6-13 #取八位数字,21793709
date +%s%N | md5sum | head -c 8 #八位字母和数字的组合,87022fda
⑵ 有谁可以用Shell命令来产生随机数
#!/usr/bin/perl -w
#p.pl
use 5.010;
#-------------------
@a=map{chomp;$_}`cat @ARGV`;
#-------------------
until (@all==10){
(@b,@b,@c,$m,$n,@f,$h)=();
until (@b == @a){
$i=int(rand(@a));
next if $i ~~ @b;
push @f,$i if @f<@a/2;
$b[$m++]=$i;
$c[$n++]=$a[$i];
}
$h=join '',sort @f;
next if $h ~~ @all;
push @all,$h;
#-------------------
@r1=@c[0..@b/2-1];
@r2=@c[@b/2..@b-1];
#-------------------
$|=1;
print "\n==== ".++$p." ====\n\n";
print " file-1:\n\n";
for ( sort @r1){
print " $_\n";
}
print "\n file-2:\n\n";
for ( sort @r2){
print " $_\n";
}
}
file1:
1 A
2 B
3 C(+enter)
file2:
1 a
2 b
3 c(+enter)
实现:
perl p.pl file1 file2
save文件 perl p.pl file1 file2>file3
==== 1 ====
file-1:
2 B
3 C
3 c
file-2:
1 A
1 a
2 b
==== 2 ====
file-1:
1 A
1 a
3 c
file-2:
2 B
2 b
3 C
==== 3 ====
file-1:
1 A
2 B
2 b
file-2:
1 a
3 C
3 c
==== 4 ====
file-1:
1 a
2 B
3 c
file-2:
1 A
2 b
3 C
==== 5 ====
file-1:
1 A
2 b
3 C
file-2:
1 a
2 B
3 c
==== 6 ====
file-1:
2 B
2 b
3 C
file-2:
1 A
1 a
3 c
==== 7 ====
file-1:
1 A
2 b
3 c
file-2:
1 a
2 B
3 C
==== 8 ====
file-1:
1 A
3 C
3 c
file-2:
1 a
2 B
2 b
==== 9 ====
file-1:
2 B
2 b
3 c
file-2:
1 A
1 a
3 C
==== 10 ====
file-1:
1 A
2 B
3 c
file-2:
1 a
2 b
3 C
希望对您有帮助
回答补充::
难以理解,最好有个最好有
2个10行范例文件
and 1个排好序的范例文件
详细说明
⑶ 随机数shell脚本问题
for iterator in {1..10}
do
echo -n -e "$((RANDOM %10)) "
done 放到一个单独脚本里,用.引入此脚本
⑷ 要求,写一个shell脚本,不断回显1到10这10个随机数,只能在一行不断回显,按回车停止,显示最
while:
do
num=$((RANDOM%10+1))
printf"%2d"$num
ifread-t.3a
then
break
fi
printf""
done
⑸ shell怎么产生一个随机数,要求是0到1之间的,小数位数是16位
r
=
randi([iMin,iMax],m,n)在
开区间
(iMin,iMax)生成mXn型
随机矩阵
matlab中生成
随机数
主要有三个函数:rand,
randn,randi
1,rand
生成
均匀分布
的
伪随机数
。分布在(0~1)之间
主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,
⑹ shell 如何生成随机数
cat /proc/sys/kernel/random/uuid
7b57209a-d285-4fd0-88b4-9d3162d2e1bc
#连续2次读取,得到的uuid是不同的
cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "
2141807556
⑺ shell脚本生成[4,9]范围内的随机整数,包含边界值4和9,并将随机数序列存放在一个数组中,脚本实现
#!/bin/sh
declare -a arr #声明arr为数组
arr=(`seq 4 9 | awk 'BEGIN{srand();ORS=" "} {b[rand()]=$0} END{for(x in b) print b[x]}'`)
echo ${arr[*]} #打印数组array的所有元素
exit 0
说明:
生成[4,9]范围内不重复的随机整数,并保存到数组arr中。
seq 4 9 用于生成4~9的整数序列(包含边界值4和9)。
awk中的rand() 函数用于随机产生一个0到1之间的小数值(保留小数点后6位)。
由于rand()只生成一次随机数,要使用srand() 函数使随机数滚动生成(括号里留空即默认采用当前时间作为随机计数器的种子)。这样以秒为间隔,随机数就能滚动随机生成了。
限制:
由于以秒为间隔,所以如果快速连续运行两次脚本(1s内),你会发现生成的随机数还是一样的。
⑻ 如何用Shell脚本生成10个随机数并排序
i=1
while[$i-le10]
do
if[$i-eq1]
then
a[$i]=$RANDOM
else
j=$i
a[$j]=$RANDOM
while[$j-ge2]&&[${a[$j]}-le${a[$((j-1))]}]
do
t=${a[$j]}
a[$j]=${a[$((j-1))]}
a[$((j-1))]=$t
j=$((j-1))
done
fi
i=$((i+1))
done
echo${a[@]}
⑼ shell中如何获取随机数
echo $RANDOM
echo $[RANDOM % 10] 一位数
echo $[RANDOM % 100] 两位数
⑽ shell脚本怎么随机调用其他脚本
1. 计算出当前目录下以.sh结尾的脚本数目(假设头脚本不在这个文件夹里):num=`ls *.sh|wc -l`
2. 获取当前秒数:sec=`date +%s`
3. 基于脚本数目计算随机数(范围1~$num):randNum=`expr $sec % $num + 1`
4. 根据随机数调用脚本:sh /path/`ls|sed -n ${randNum}p`