shell中生成随机数、随机字符串

Shell Liemer_Lius 1378℃ 0评论

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中生成随机数、随机字符串

喜欢 (1)

发表回复