42 lines
2.0 KiB
Bash
42 lines
2.0 KiB
Bash
#!/bin/bash
|
|
# core/validator.sh - unified option validation.
|
|
#
|
|
# The primary validation still happens inline inside parse_arguments and
|
|
# show_menu (migrated verbatim, to preserve the exact error messages and the
|
|
# "already installed" guards). validate_options() is a final, idempotent
|
|
# safety net: it re-checks only options that are still set, using the same
|
|
# regexes and messages, so it can never change a valid install path.
|
|
|
|
# Validate a single value against an ERE.
|
|
# $1 = value, $2 = regex, $3 = error message
|
|
is_valid() {
|
|
local val="$1" regex="$2" msg="$3"
|
|
if [[ "${val}" =~ ${regex} ]]; then
|
|
return 0
|
|
fi
|
|
echo "${CWARNING}${msg}${CEND}"
|
|
return 1
|
|
}
|
|
|
|
# Re-validate options that are still set after parse/menu. Empty options
|
|
# (e.g. unset because already installed) are skipped.
|
|
validate_options() {
|
|
_check_opt() {
|
|
# $1 = value, $2 = regex, $3 = message
|
|
[ -z "$1" ] && return 0
|
|
is_valid "$1" "$2" "$3" || error_exit "$3"
|
|
}
|
|
|
|
_check_opt "${nginx_option}" '^[1-2]$' "nginx_option input error! Please only input number 1~2"
|
|
_check_opt "${php_option}" '^[1-3]$' "php_option input error! Please only input number 1~3"
|
|
_check_opt "${mphp_ver}" '^(74|80|81)$' "mphp_ver input error! Please only input number 74/80/81"
|
|
# On Ubuntu 24+ only PHP 8.x is supported; PHP 7.4 (and the mphp 7.4 build)
|
|
# fails to compile against the newer system libicu.
|
|
if [[ "${Family}" == "ubuntu" ]] && [ "${Ubuntu_ver:-0}" -ge 24 ]; then
|
|
[ "${php_option}" == '1' ] && error_exit "PHP 7.4 is not supported on Ubuntu ${Ubuntu_ver}+, please choose PHP 8.x (option 2 or 3)"
|
|
[ "${mphp_ver}" == '74' ] && error_exit "mphp 7.4 is not supported on Ubuntu ${Ubuntu_ver}+, please choose 80 or 81"
|
|
fi
|
|
_check_opt "${db_option}" '^[1-9]$' "db_option input error! Please only input number 1~9"
|
|
_check_opt "${dbinstallmethod}" '^[1-2]$' "dbinstallmethod input error! Please only input number 1~2"
|
|
}
|