今天在做一道题时要求生成指定长度的密码,要求包含小写字母大写字母或数字
于是乎我写了一个脚本,放在/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
看看啥情况。
nihao