随机生成密码

#!/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  
}