diff --git a/common.sh b/common.sh new file mode 100644 index 0000000..71495a8 --- /dev/null +++ b/common.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# 安装 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 +} + diff --git a/hiwifi-b70.sh b/hiwifi-b70.sh index 9cad896..bb67261 100644 --- a/hiwifi-b70.sh +++ b/hiwifi-b70.sh @@ -1,10 +1,7 @@ #!/bin/bash set -e -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 -} +source common.sh download_imagebuilder() { local version="$1" @@ -156,59 +153,7 @@ build() { echo -e "固件输出: ${PROJECT_OUTPUT_DIR}" } -# ============================================================= -# 交互输入函数 -# 参数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 -} project_dir="$(cd "$(dirname "$0")" && pwd)" cd "$project_dir" diff --git a/newifi3_d2.sh b/newifi3_d2.sh index 94ff09f..413e348 100644 --- a/newifi3_d2.sh +++ b/newifi3_d2.sh @@ -1,10 +1,7 @@ #!/bin/bash set -e -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 -} +source common.sh download_imagebuilder() { local version="$1" @@ -32,24 +29,7 @@ download_imagebuilder() { echo "$(pwd)/$folder" } -# ============================================================= -# 交互输入函数 -# 参数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 -} build() { # ============================================================= @@ -174,40 +154,8 @@ build() { echo -e "固件输出: ${PROJECT_OUTPUT_DIR}" } -# 获取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 -} project_dir="$(cd "$(dirname "$0")" && pwd)" cd "$project_dir" diff --git a/r2s.sh b/r2s.sh index f4da511..1156225 100644 --- a/r2s.sh +++ b/r2s.sh @@ -1,11 +1,7 @@ #!/bin/bash set -e -# 安装 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 -} +source common.sh # 下载并解压 FriendlyARM NanoPi R2S 的 Image Builder # 参数 1: ImmortalWrt 版本号,例如 25.12.1 @@ -203,59 +199,6 @@ build(){ fi } -# ============================================================= -# 交互输入函数 -# 参数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 -} # 项目根目录,保证从任意位置执行 r2s.sh 都能找到其他资源 project_dir="$(cd "$(dirname "$0")" && pwd)" diff --git a/x86-64.sh b/x86-64.sh index 1e3adda..f385717 100644 --- a/x86-64.sh +++ b/x86-64.sh @@ -1,11 +1,7 @@ #!/bin/bash set -e -# 安装 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 -} +source common.sh # 下载并解压 x86-64 的 Image Builder # 参数 1: ImmortalWrt 版本号,例如 25.12.1 @@ -229,60 +225,6 @@ build(){ } -# ============================================================= -# 交互输入函数 -# 参数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 -} - # 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号 default_version="25.12.1"