test.sh
· 1.8 KiB · Bash
Eredeti
#!/usr/bin/env bash
set -euo pipefail
BOLD=$'\033[1m'
DIM=$'\033[2m'
RESET=$'\033[0m'
RED=$'\033[0;31m'
GREEN=$'\033[0;32m'
YELLOW=$'\033[0;33m'
BLUE=$'\033[0;34m'
CYAN=$'\033[0;36m'
summary_box() {
local width=60
local border
border=$(printf '─%.0s' $(seq 1 $width))
echo ""
echo " ${CYAN}${border}${RESET}"
while [ $# -gt 0 ]; do
printf " ${CYAN}│${RESET} %-28s %s\n" "$1" "$2"
shift 2
done
echo " ${CYAN}${border}${RESET}"
echo ""
}
ask_password_i() {
local label=$1
local default_password="$(openssl rand -base64 12)"
local value
read -e -rp " ${CYAN}?${RESET} $label: " -i "${default_password}" value </dev/tty
echo "" >&2
echo "$value"
}
ask_password_visible() {
local label=$1
local default_password="$(openssl rand -base64 12)"
local value
printf " ${CYAN}?${RESET} $label [%s]: " "$default_password" >&2
read -r value </dev/tty
echo "${value:-$default_password}"
}
ask_password_visible2() {
local label=$1
local default_password="$(openssl rand -base64 12)"
local value
if [ -t 0 ] && [ -t 1 ] && command -v bash >/dev/null; then
# Только если настоящий интерактивный терминал
read -e -rp " ${CYAN}?${RESET} $label: " -i "$default_password" value </dev/tty 2>/dev/null || \
read -r -p " ${CYAN}?${RESET} $label [$default_password]: " value </dev/tty
else
read -r -p " ${CYAN}?${RESET} $label [$default_password]: " value </dev/tty
fi
echo "${value:-$default_password}"
echo "" >&2
}
pass1=$(ask_password_visible "Password (mixed case, digits, min 12 chars)")
pass2=$(ask_password_visible2 "Password (mixed case, digits, min 12 chars)")
pass3=$(ask_password_i "Password (mixed case, digits, min 12 chars):")
summary_box "passC" "${pass3}"
| 1 | #!/usr/bin/env bash |
| 2 | set -euo pipefail |
| 3 | |
| 4 | BOLD=$'\033[1m' |
| 5 | DIM=$'\033[2m' |
| 6 | RESET=$'\033[0m' |
| 7 | RED=$'\033[0;31m' |
| 8 | GREEN=$'\033[0;32m' |
| 9 | YELLOW=$'\033[0;33m' |
| 10 | BLUE=$'\033[0;34m' |
| 11 | CYAN=$'\033[0;36m' |
| 12 | |
| 13 | summary_box() { |
| 14 | local width=60 |
| 15 | local border |
| 16 | border=$(printf '─%.0s' $(seq 1 $width)) |
| 17 | echo "" |
| 18 | echo " ${CYAN}${border}${RESET}" |
| 19 | while [ $# -gt 0 ]; do |
| 20 | printf " ${CYAN}│${RESET} %-28s %s\n" "$1" "$2" |
| 21 | shift 2 |
| 22 | done |
| 23 | echo " ${CYAN}${border}${RESET}" |
| 24 | echo "" |
| 25 | } |
| 26 | |
| 27 | ask_password_i() { |
| 28 | local label=$1 |
| 29 | local default_password="$(openssl rand -base64 12)" |
| 30 | local value |
| 31 | |
| 32 | read -e -rp " ${CYAN}?${RESET} $label: " -i "${default_password}" value </dev/tty |
| 33 | echo "" >&2 |
| 34 | echo "$value" |
| 35 | } |
| 36 | |
| 37 | ask_password_visible() { |
| 38 | local label=$1 |
| 39 | local default_password="$(openssl rand -base64 12)" |
| 40 | local value |
| 41 | |
| 42 | printf " ${CYAN}?${RESET} $label [%s]: " "$default_password" >&2 |
| 43 | read -r value </dev/tty |
| 44 | |
| 45 | echo "${value:-$default_password}" |
| 46 | } |
| 47 | |
| 48 | ask_password_visible2() { |
| 49 | local label=$1 |
| 50 | local default_password="$(openssl rand -base64 12)" |
| 51 | local value |
| 52 | |
| 53 | if [ -t 0 ] && [ -t 1 ] && command -v bash >/dev/null; then |
| 54 | # Только если настоящий интерактивный терминал |
| 55 | read -e -rp " ${CYAN}?${RESET} $label: " -i "$default_password" value </dev/tty 2>/dev/null || \ |
| 56 | read -r -p " ${CYAN}?${RESET} $label [$default_password]: " value </dev/tty |
| 57 | else |
| 58 | read -r -p " ${CYAN}?${RESET} $label [$default_password]: " value </dev/tty |
| 59 | fi |
| 60 | |
| 61 | echo "${value:-$default_password}" |
| 62 | echo "" >&2 |
| 63 | } |
| 64 | |
| 65 | pass1=$(ask_password_visible "Password (mixed case, digits, min 12 chars)") |
| 66 | pass2=$(ask_password_visible2 "Password (mixed case, digits, min 12 chars)") |
| 67 | pass3=$(ask_password_i "Password (mixed case, digits, min 12 chars):") |
| 68 | |
| 69 | summary_box "passC" "${pass3}" |
| 70 | |
| 71 | |
| 72 |