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`