#!/bin/bash
 
generate_password() {
    local groups=4
    local include_special=0
 
    # Параметры (например: generate_password 6 1)
    if [[ $1 =~ ^[0-9]+$ ]]; then groups=$1; fi
    if [[ $2 == "1" ]]; then include_special=1; fi
 
    # Безопасные символы
    local lower="abcdefghjkmnpqrtuvwxyz"
    local upper="ACDEFGHJKLMNPQRTUVWXY"
    local digits="23456789"
    local special="!@#%+="
    local any="${lower}${upper}${digits}"
    [[ $include_special == 1 ]] && any="${any}${special}"
 
    local password=""
    for ((i = 0; i < groups; i++)); do
        c1="${lower:RANDOM%${#lower}:1}"
        c2="${upper:RANDOM%${#upper}:1}"
        c3="${digits:RANDOM%${#digits}:1}"
        c4="${any:RANDOM%${#any}:1}"
 
        # Перемешать символы в блоке
        block=$(echo "$c1$c2$c3$c4" | fold -w1 | shuf | tr -d '\n')
        password+="$block"
        [[ $i -lt $((groups - 1)) ]] && password+="-"
    done
 
    echo "$password"
}
 
# Примеры:
#generate_password        # по умолчанию 4 группы без спецсимволов
generate_password 15 1    # 5 групп, включить спецсимволы