/
jenyapng
/
project-bash
Обзор
Документация
Войти
/
jenyapng
/
project-bash
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
task-2/script-20.sh
116 строк
4 KB
jenyapng
first_commit
11 авг 2026, 16:22
11 авг 2026, 16:22
9ea1476
Код
Авторство
О чём код?
#!/bin/bash # Конфигурация символов LOWER="abcdefghijklmnopqrstuvwxyz" UPPER="ABCDEFGHIJKLMNOPQRSTUVWXYZ" DIGITS="0123456789" SPECIAL="!@#$%^&*()_+-=[]{}|;:,.<>?~" generate_password() { local length=$1 local use_special=${2:-true} # Объединяем символы в зависимости от настроек local chars="${LOWER}${UPPER}${DIGITS}" $use_special && chars+="${SPECIAL}" # Генерация пароля с использованием openssl (если доступно) if command -v openssl &>/dev/null; then password=$(openssl rand -base64 48 | tr -dc "$chars" | head -c "$length") else password=$(head /dev/urandom | tr -dc "$chars" | head -c "$length") fi # Гарантируем хотя бы один символ каждого типа password=$(ensure_char_classes "$password" "$use_special") echo "$password" } ensure_char_classes() { local pass=$1 local use_special=$2 # Функция для проверки и добавления отсутствующих классов символов local missing=() [[ "$pass" != *[a-z]* ]] && missing+=("lowercase") [[ "$pass" != *[A-Z]* ]] && missing+=("uppercase") [[ "$pass" != *[0-9]* ]] && missing+=("digit") $use_special && [[ "$pass" != *[$SPECIAL]* ]] && missing+=("special") for type in "${missing[@]}"; do case $type in lowercase) pass+=$(echo "$LOWER" | fold -w1 | shuf -n1) ;; uppercase) pass+=$(echo "$UPPER" | fold -w1 | shuf -n1) ;; digit) pass+=$(echo "$DIGITS" | fold -w1 | shuf -n1) ;; special) pass+=$(echo "$SPECIAL" | fold -w1 | shuf -n1) ;; esac done # Перемешиваем результат echo "$pass" | fold -w1 | shuf | tr -d '\n' } # Параметры по умолчанию length=12 count=5 use_special=true show_strength=false # Обработка аргументов while [[ $# -gt 0 ]]; do case "$1" in -l|--length) length="$2" [[ $length -lt 8 ]] && { echo "Минимальная длина пароля - 8" >&2; exit 1; } shift 2 ;; -c|--count) count="$2" shift 2 ;; -s|--no-special) use_special=false shift ;; --strength) show_strength=true shift ;; -h|--help) echo "Использование: $0 [опции]" echo "Примеры:" echo " $0 -l 16 -c 3 # 3 пароля по 16 символов" echo " $0 --no-special # Без специальных символов" echo "Опции:" echo " -l, --length Длина пароля (по умолчанию: 12, минимум: 8)" echo " -c, --count Количество паролей (по умолчанию: 5)" echo " -s, --no-special Без специальных символов" echo " --strength Показать оценку сложности" echo " -h, --help Эта справка" exit 0 ;; *) echo "Неизвестный параметр: $1" >&2 exit 1 ;; esac done # Генерация паролей echo "Генерация $count паролей по $length символов:" echo "----------------------------------------" for ((i=1; i<=count; i++)); do pass=$(generate_password "$length" "$use_special") if $show_strength; then strength=$(check_password_strength "$pass") printf "%2d: %-${length}s | %s\n" "$i" "$pass" "$strength" else printf "%2d: %s\n" "$i" "$pass" fi done echo "----------------------------------------"