#!/bin/bash
# 长度 字符数量 数字数量
# 剔除掉 iIoO0sS5 肉眼混乱
generate_password() {
local length max_symbols symbols characters password index symbols_count nums max_num
length=${1:-5}
max_symbols=${2:-1}
max_num=${3:-1}
length=$(( length - max_symbols - max_num))
symbols=("@" "#" '$' "%" "&" '*' '(' ')' )
characters=("a" "b" "c" "d" "e" "f" "g" "h" "j" "k" "l" "m" "n" "p" "q" "r" "t" "u" "v" "w" "x" "y" "z" "A" "B" "C" "D" "E" "F" "G" "H" "J" "K" "L" "M" "N" "P" "Q" "R" "T" "U" "V" "W" "X" "Y" "Z")
nums=("1" "2" "3" "4" "6" "7" "8" "9")
password=""
for ((i=1; i<=$length; i++)); do
index=$(( RANDOM % ${#characters[@]} ))
character=${characters[$index]}
password="$password$character"
done
symbols_count=0
while (( symbols_count < max_symbols )); do
index=$(( RANDOM % ${#symbols[@]} ))
character="${symbols[$index]}"
password="${password}${character}"
symbols_count=$(( symbols_count + 1 ))
done
symbols_count=0
while (( symbols_count < max_num )); do
index=$(( RANDOM % ${#nums[@]} ))
character="${nums[$index]}"
password="${password}${character}"
symbols_count=$(( symbols_count + 1 ))
done
echo "$password" | tr -d "iIoO0sS5" | fold -w1 | shuf | tr -d "\n"
echo
}