1、随机数
我们用到的概念是数组。每次出现数字以后,比对数组中的其他值,如果重复就重新生成,知道生成所有的不重复数组为止。
shell脚本实现:随机产生1-39中的N个数字,且不能重复代码:
#!/bin/bash
#
# Date: 2018-01-09
# Script Name: m.sh
# Author: Liemer_Lius
declare -a ARRAY
read -p "[1-39]: " ELENUM
function COMELE {
for J in `seq 0 $[${#ARRAY[@]}-1]`; do
if [ $1 -eq ${ARRAY[$J]} ]; then
return 1
fi
done
return 0
}
for I in `seq 0 $[$ELENUM-1]`; do
while true; do
ELEMENT=$[$RANDOM%40]
COMELE $ELEMENT
if [ $? -eq 0 ]; then
break
fi
done
ARRAY[$I]=$ELEMENT
echo "${ARRAY[$I]}"
done
其中的函数COMELE,就是判断我们的参数,是否和数组中已有的数值是否相等的。
在while循环中,我们会一直测试$ELEMENT和数组中的值,不生成非重复的值将不会停止。每次产生了符合条件的ELEMENT,就将其丰富进属组ARRAY里面。
执行结果:
[root@Master ~]# ./m.sh
[1-39]: 3
38
9
29
[root@Master ~]# ./m.sh 39
[1-39]: 39
3
19
16
25
28
5
11
10
1
29
6
12
17
35
24
30
20
7
32
18
26
0
38
2
33
39
36
22
9
37
27
15
31
34
23
14
4
13
21
2、随机字符串
方法1:
date +%N | md5sum | cut -c 1-8
方法2:
top -d 1 -n 1 | md5sum | cut -c 1-8
方法3:
echo $RANDOM | md5sum | cut -c 1-8
方法4:
openssl rand base64 4 | md5sum | cut -c 1-8
3、随机字符串大小写字母数字
#!/bin/bash
# bash generate random alphanumeric string
# bash generate random 32 character alphanumeric string (upper and lowercase) and
NEW_UUID=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
# bash generate random 32 character alphanumeric string (lowercase only)
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
# Random numbers in a range, more randomly distributed than $RANDOM which is not
# very random in terms of distribution of numbers.
# bash generate random number between 0 and 9
cat /dev/urandom | tr -dc '0-9' | fold -w 256 | head -n 1 | head --bytes 1
# bash generate random number between 0 and 99
NUMBER=$(cat /dev/urandom | tr -dc '0-9' | fold -w 256 | head -n 1 | sed -e 's/^0*//' | head --bytes 2)
if [ "$NUMBER" == "" ]; then
NUMBER=0
fi
# bash generate random number between 0 and 999
NUMBER=$(cat /dev/urandom | tr -dc '0-9' | fold -w 256 | head -n 1 | sed -e 's/^0*//' | head --bytes 3)
if [ "$NUMBER" == "" ]; then
NUMBER=0
fi
转载请注明:liutianfeng.com » shell中生成随机数、随机字符串
发表回复
要发表评论,您必须先登录。