我有这个脚本,它生成随机密码,但需要改组。我找不到办法做到这一点。请帮我。
num=("0" "1" "2" "3" "4" "5" "7" "8" "9")
special=("@" "#" "$" "%" "*" "-" "+")
upper=(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)
lower=(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)
lower2=${#lower[*]} #${lower[$((RANDOM%lower2))]}
upper2=${#upper[*]} #${upper[$((RANDOM%upper2))]}
num2=${#num[*]} #${num[$((RANDOM%num2))]}
special2=${#special[*]} #${special[$((RANDOM%special2))]}
echo "${special[$((RANDOM%special2))]}${num[$((RANDOM%num2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}${lower[$((RANDOM%lower2))]}${upper[$((RANDOM%upper2))]}"
Run Code Online (Sandbox Code Playgroud)
这是输出:@7nOyIaJ
我如何随机化这个?
slm*_*slm 13
我假设您希望它随机化,因为“特殊”始终是第一位的。这是一个巨大的hacky方式。注意:您的脚本是scr.bash.
$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
Run Code Online (Sandbox Code Playgroud)
$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
qT*Jyv8Y
$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
QbOvX3n-
$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
*Q5nGgIt
Run Code Online (Sandbox Code Playgroud)
这很粗糙,但向您展示了方法。
该fold命令会将输出分成每行 1 个字符。还有其他方法可以做到这一点,但我选择了fold. 该shuf命令可以将行“洗牌”成随机顺序。该tr命令将从\n我们所做的初始折叠中删除换行符 ( )。