refactor: 抽取函数, 统一放入common.sh

This commit is contained in:
Olia Lisa
2026-07-24 11:10:56 +08:00
parent 2b5026d76c
commit a9b7f09e06
5 changed files with 66 additions and 226 deletions
+62
View File
@@ -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
}
+1 -56
View File
@@ -1,10 +1,7 @@
#!/bin/bash #!/bin/bash
set -e set -e
install_dependencies() { source common.sh
sudo apt install -y build-essential libncurses-dev zlib1g-dev gawk git \
gettext libssl-dev xsltproc rsync wget unzip python3 qemu-utils mkisofs zstd
}
download_imagebuilder() { download_imagebuilder() {
local version="$1" local version="$1"
@@ -156,59 +153,7 @@ build() {
echo -e "固件输出: ${PROJECT_OUTPUT_DIR}" 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)" project_dir="$(cd "$(dirname "$0")" && pwd)"
cd "$project_dir" cd "$project_dir"
+1 -53
View File
@@ -1,10 +1,7 @@
#!/bin/bash #!/bin/bash
set -e set -e
install_dependencies() { source common.sh
sudo apt install -y build-essential libncurses-dev zlib1g-dev gawk git \
gettext libssl-dev xsltproc rsync wget unzip python3 qemu-utils mkisofs zstd
}
download_imagebuilder() { download_imagebuilder() {
local version="$1" local version="$1"
@@ -32,24 +29,7 @@ download_imagebuilder() {
echo "$(pwd)/$folder" 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() { build() {
# ============================================================= # =============================================================
@@ -174,40 +154,8 @@ build() {
echo -e "固件输出: ${PROJECT_OUTPUT_DIR}" 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)" project_dir="$(cd "$(dirname "$0")" && pwd)"
cd "$project_dir" cd "$project_dir"
+1 -58
View File
@@ -1,11 +1,7 @@
#!/bin/bash #!/bin/bash
set -e set -e
# 安装 Image Builder 构建所需依赖 source common.sh
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
}
# 下载并解压 FriendlyARM NanoPi R2S 的 Image Builder # 下载并解压 FriendlyARM NanoPi R2S 的 Image Builder
# 参数 1: ImmortalWrt 版本号,例如 25.12.1 # 参数 1: ImmortalWrt 版本号,例如 25.12.1
@@ -203,59 +199,6 @@ build(){
fi 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 都能找到其他资源 # 项目根目录,保证从任意位置执行 r2s.sh 都能找到其他资源
project_dir="$(cd "$(dirname "$0")" && pwd)" project_dir="$(cd "$(dirname "$0")" && pwd)"
+1 -59
View File
@@ -1,11 +1,7 @@
#!/bin/bash #!/bin/bash
set -e set -e
# 安装 Image Builder 构建所需依赖 source common.sh
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
}
# 下载并解压 x86-64 的 Image Builder # 下载并解压 x86-64 的 Image Builder
# 参数 1: ImmortalWrt 版本号,例如 25.12.1 # 参数 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 查询版本号 # 要构建的 ImmortalWrt 版本, 可以在 https://github.com/immortalwrt/immortalwrt 查询版本号
default_version="25.12.1" default_version="25.12.1"