alist,ddnsgo更新脚本分享
背景
搭了服务又没怎么用,每次想起来才登上去更新下,每次手动更新都嫌麻烦了但又懒得写自动更新脚本,现在deepseek这么火,直接生成脚本一次跑通。deepseek太牛啦!
ddnsgo更新脚本
#!/bin/bash
set -euo pipefail
# 基础配置参数
INSTALL_DIR="/opt/ddns-go"
BIN_NAME="ddns-go"
SERVICE_NAME="ddns-go.service"
TMP_DIR=$(mktemp -d)
USER_NAME="ddnsgo"
GROUP_NAME="ddnsgo"
# 获取当前已安装版本
current_version=$("$INSTALL_DIR/$BIN_NAME" -v | awk '{print substr($0,2)}') || current_version="0.0.0"
# 获取GitHub最新release版本
latest_version=$(curl -sI https://github.com/jeessy2/ddns-go/releases/latest | grep -i location | awk -F '/' '{print $NF}' | tr -d 'v\r')
# 版本比较函数
version_compare() {
printf "%s\n%s" "$1" "$2" | sort -V -r | head -n1
}
# 判断是否需要更新
if [[ $(version_compare "$current_version" "$latest_version") == "$current_version" ]]; then
echo "当前版本 $current_version 已是最新,无需更新"
exit 0
fi
# 确定系统架构映射关系(根据release文件命名规则)
case $(uname -m) in
aarch64) arch="arm64" ;;
x86_64) arch="x86_64" ;;
*) echo "不支持的架构: $(uname -m)" && exit 1 ;;
esac
# 构建下载URL
download_url="https://github.com/jeessy2/ddns-go/releases/download/v${latest_version}/ddns-go_${latest_version}_linux_${arch}.tar.gz"
# 下载并解压安装包
echo "正在下载版本 v$latest_version..."
curl -sL "$download_url" -o "$TMP_DIR/ddns-go.tar.gz" || { echo "下载失败"; exit 1; }
tar xzf "$TMP_DIR/ddns-go.tar.gz" -C "$TMP_DIR" || { echo "解压失败"; exit 1; }
# 安装新版本(使用install命令保持权限设置)
sudo install -m755 -g "$GROUP_NAME" -o "$USER_NAME" "$TMP_DIR/$BIN_NAME" "$INSTALL_DIR/$BIN_NAME"
# 停止旧服务
sudo systemctl stop "$SERVICE_NAME" 2>/dev/null || true
# 应用配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart "$SERVICE_NAME"
# 清理临时文件
rm -rf "$TMP_DIR"
echo "DDNS-GO 已成功更新至 v$latest_version"
alist更新脚本
#!/bin/bash
set -euo pipefail
# 基础配置参数
INSTALL_DIR="/opt/alist"
BIN_NAME="alist"
SERVICE_NAME="alist.service"
TMP_DIR=$(mktemp -d)
USER_NAME="alist"
GROUP_NAME="alist"
# 获取当前已安装版本
current_version=$("$INSTALL_DIR/$BIN_NAME" version | grep -E '^Version:' | awk '{print $2}' | sed 's/v//') || current_version="0.0.0"
# 获取GitHub最新release版本
latest_version=$(curl -sI https://github.com/AlistGo/alist/releases/latest | grep -i location | awk -F '/' '{print $NF}' | tr -d 'v\r')
# 版本比较函数
version_compare() {
printf "%s\n%s" "$1" "$2" | sort -V -r | head -n1
}
# 判断是否需要更新
if [[ $(version_compare "$current_version" "$latest_version") == "$current_version" ]]; then
echo "当前版本 $current_version 已是最新,无需更新"
exit 0
fi
# 确定系统架构映射关系(根据release文件命名规则)
case $(uname -m) in
aarch64) arch="arm64" ;;
arm64) arch="arm64" ;;
x86_64) arch="amd64" ;;
*) echo "不支持的架构: $(uname -m)" && exit 1 ;;
esac
# 构建下载URL
download_url="https://github.com/AlistGo/alist/releases/download/v${latest_version}/alist-linux-${arch}.tar.gz"
# 下载并解压安装包
echo "正在下载版本 v$latest_version..."
curl -sL "$download_url" -o "$TMP_DIR/alist.tar.gz" || { echo "下载失败"; exit 1; }
tar xzf "$TMP_DIR/alist.tar.gz" -C "$TMP_DIR" || { echo "解压失败"; exit 1; }
# 安装新版本(使用install命令保持权限设置)
sudo install -m755 -g "$GROUP_NAME" -o "$USER_NAME" "$TMP_DIR/$BIN_NAME" "$INSTALL_DIR/$BIN_NAME"
# 停止旧服务
sudo systemctl stop "$SERVICE_NAME" 2>/dev/null || true
# 应用配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart "$SERVICE_NAME"
# 清理临时文件
rm -rf "$TMP_DIR"
echo "alist 已成功更新至 v$latest_version"
总结
deepseek太牛啦,需求及其上下文提供充分,一次就跑通了,写出来的比我自己写的好多了。

浙公网安备 33010602011771号