86 lines
1.6 KiB
Bash
86 lines
1.6 KiB
Bash
#!/bin/bash
|
|
|
|
green="\033[32m"
|
|
blue="\033[36m"
|
|
yellow="\033[33m"
|
|
reset="\033[0m"
|
|
|
|
step() {
|
|
echo ""
|
|
echo -e "${blue}👉 $1${reset}"
|
|
sleep 0.5
|
|
}
|
|
|
|
success() {
|
|
echo -e "${green}✅ $1${reset}"
|
|
}
|
|
|
|
skip() {
|
|
echo -e "${yellow}⏭️ $1${reset}"
|
|
}
|
|
|
|
info() {
|
|
echo -e "${blue}👉 $1${reset}"
|
|
}
|
|
|
|
# 安装 Image Builder 构建所需依赖
|
|
install_dependencies() {
|
|
sudo apt install -y build-essential libncurses-dev zlib1g-dev gawk git \
|
|
gettext libssl-dev xsltproc rsync wget unzip python3 qemu-utils mkisofs zstd
|
|
}
|
|
|
|
# =============================================================
|
|
# 交互输入函数
|
|
# 参数1: 提示信息
|
|
# 参数2: 默认值
|
|
# 返回: 用户输入值,直接回车返回默认值
|
|
# =============================================================
|
|
ask_input() {
|
|
local prompt="$1"
|
|
local default="$2"
|
|
|
|
read -p "${prompt} [ 默认: ${default} ]: " value
|
|
|
|
if [ -z "$value" ]; then
|
|
echo "$default"
|
|
else
|
|
echo "$value"
|
|
fi
|
|
}
|
|
|
|
# 获取lan口ip
|
|
input_lan_ip() {
|
|
local default_ip="$1"
|
|
|
|
while true; do
|
|
local ip
|
|
|
|
ip=$(ask_input "请输入lan口ip" "$default_ip")
|
|
|
|
if valid_ipv4 "$ip"; then
|
|
echo "$ip"
|
|
return 0
|
|
else
|
|
echo "[错误] IP地址格式不正确,请重新输入" >&2
|
|
fi
|
|
done
|
|
}
|
|
|
|
valid_ipv4() {
|
|
local ip="$1"
|
|
|
|
# 第一层:检查格式,必须是4段数字
|
|
echo "$ip" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' || return 1
|
|
|
|
# 第二层:检查每段范围
|
|
echo "$ip" | awk -F. '
|
|
$1>=0 && $1<=255 &&
|
|
$2>=0 && $2<=255 &&
|
|
$3>=0 && $3<=255 &&
|
|
$4>=0 && $4<=255
|
|
' | grep -q . || return 1
|
|
|
|
return 0
|
|
}
|
|
|