成功最有效的方法就是向有经验的人学习!

随机生成指定长度的字符串(大写小写数字)

今天在做一道题时要求生成指定长度的密码,要求包含小写字母大写字母或数字

于是乎我写了一个脚本,放在/usr/bin目录下供脚本中调用。

每一个字符都是由系统变量RANDOM随机从指定的库中取余得出的。

脚本用法:

默认不加参数表示输出数字,不指定长度默认为8位。

L:表示输出小字字母

N:表示输出数字

U:表示输出大写字母

使用方法:

cd /usr/bin

vim rand

将代码写入保存

[reply]

#!/usr/bin/bash  
#Version V1.0
#Author ChenGuilin
#Create Time 2018-11-5
#QQ 21108858
#site https://www.gl.sh.cn
#随机生成字符串
#任意数字: 生成随机数的位数(默认产生8位随机字符)
#N : 使用数字(不加选项时,默认使用数字)
#U : 使用大写字母
#L : 使用小写字母

while [[ $# -ge 1 ]]; do
  case $1 in
    -n|--num)
      shift
      inNum="$1"
      shift
      ;;
    -N|--number)
      shift
      isNumber='1'
      ;;
    -L|--lower)
      shift
      isLower='1'
      ;;
    -U|--upper)
      shift
      isUpper='1'
      ;;
    -h|-H|--help)
      echo -ne " Usage:\n\t$0\t[NUL][number]\n\t\t-N\--number\n\t\t-L\--lower\n\t\t-U\--upper\n"
      exit 1;
      ;;
    *)
      [ -n "$(echo -n "$1" |grep 'N\|number')" ] && isNumber='1'
      [ -n "$(echo -n "$1" |grep 'L\|lower')" ] && isLower='1'
      [ -n "$(echo -n "$1" |grep 'U\|upper')" ] && isUpper='1'
      inNum="$(echo -n "$1" |sed 's/-\|L\|lower\|N\|number\|U\|upper//g')"
      shift
      ;;
    esac
  done
 
[ -n $inNum ] && [ "$inNum" != "$(echo "$inNum" |grep -o '[0-9]\{1,\}' |xargs |sed 's/ //g')" ] && echo "Error, invalid input." && exit 1;
[ -z $inNum ] && Num='8' || Num="$inNum"
[ "$isLower" != '1' -a "$isUpper" != '1' ] && isNumber='1'
 
pool_N=(0 1 2 3 4 5 6 7 8 9)
pool_L=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
pool_U=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
 
[ "$isNumber" == '1' ] && POOL=(${pool_N[@]})
[ "$isLower" == '1' ] && POOL=(${pool_L[@]})
[ "$isUpper" == '1' ] && POOL=(${pool_U[@]})
[ "$isNumber" == '1' ] && [ "$isLower" == '1' ] && POOL=(${pool_N[@]} ${pool_L[@]})
[ "$isNumber" == '1' ] && [ "$isUpper" == '1' ] && POOL=(${pool_N[@]} ${pool_U[@]})
[ "$isLower" == '1' ] && [ "$isUpper" == '1' ] && POOL=(${pool_L[@]} ${pool_U[@]})
[ "$isNumber" == '1' ] && [ "$isLower" == '1' ] && [ "$isUpper" == '1' ] && POOL=(${pool_N[@]} ${pool_L[@]} ${pool_U[@]})
i=0
while :;
do
  STR[$i]=${POOL[$((RANDOM%${#POOL[@]}))]}
  let i++
  [ "$i" -ge "$Num" ] && break
done
 
for str in ${STR[*]}
do
  echo -n $str
done

[/reply]

设置脚本权限

chmod +x /usr/bin/rand

使用方法:

rand 12LNU

以下是我给出的一些示例供参考

使用示例:

生成含大写小写数字,长度为12的字符串

[root@m01 ~]# /server/scripts/bin/rand 12LNU
FRm76i3Or6pU

生成纯数字12位字符串

[root@m01 ~]# /server/scripts/bin/rand 12
387403678377

生成纯数字8位字符串

[root@m01 ~]# /server/scripts/bin/rand
78102405

生成纯小字8位字符串

[root@m01 ~]# /server/scripts/bin/rand L
kkwbzsid

帮助

[root@m01 ~]# /server/scripts/bin/rand -h
 Usage:
  /server/scripts/bin/rand	[NUL][number]
    -N\--number
    -L\--lower
    -U\--upper

 

赞(3) 打赏
未经允许不得转载:陈桂林博客 » 随机生成指定长度的字符串(大写小写数字)
分享到

大佬们的评论 2

  1. #2

    看看啥情况。

    lili3年前 (2020-11-21)回复
  2. #1

    nihao

    aaaa5年前 (2019-10-22)回复

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册