You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本实现变量递增后永久存储的方法咨询

解决Bash脚本永久保存递增集数的问题

问题背景

我需要编写一个每周从网站下载一对音频文件的Bash脚本,音频文件按集数递增命名(例如1001.mp3、1002.mp3)。目前编写的脚本如下:

#!/bin/bash

declare -i episode
episode=1800

wget --user username --password password https://website.com/mp3/$episode-1.mp3   
wget --user listener --password ripple02 https://website.com/mp3/$episode-2.mp3

let "episode=episode+1"
echo $episode

但当前脚本执行后,集数变量episode仅在运行时递增,无法永久保存,下次执行仍会从1800开始。想了解如何通过外部文件存储变量并实现永久更新,或其他可行的解决方法。


方法一:用外部文件存储集数(推荐)

这是最直接可靠的方案,通过单独的文件保存集数值,脚本每次读取文件内容作为当前集数,执行完成后将递增后的数值回写文件。

步骤:

  1. 先创建一个存储集数的文件(比如episode_num.txt),首次运行前写入初始值1800:
echo 1800 > episode_num.txt
  1. 修改后的脚本如下:
#!/bin/bash

# 定义存储集数的文件路径
EPISODE_FILE="./episode_num.txt"

# 首次运行时自动初始化文件
if [ ! -f "$EPISODE_FILE" ]; then
    echo 1800 > "$EPISODE_FILE"
fi

# 读取文件中的当前集数
read episode < "$EPISODE_FILE"

# 执行下载,用${episode}避免变量与后续字符解析冲突
wget --user username --password password https://website.com/mp3/${episode}-1.mp3   
wget --user listener --password ripple02 https://website.com/mp3/${episode}-2.mp3

# 递增集数并回写文件,永久保存
let "episode=episode+1"
echo "$episode" > "$EPISODE_FILE"

echo "下载完成,下一次将从第${episode}集开始"

关键细节:

  • 使用${episode}-1而不是$episode-1,防止Bash把episode-1当作一个变量名解析,确保URL拼接正确。
  • 增加文件存在性检查,避免首次运行时因文件不存在报错。

其他可选方法

  • 系统环境变量:可以将集数写入~/.bashrc或~/.profile,但每次修改后需要重新加载环境变量(例如source ~/.bashrc),灵活性不如文件存储,不推荐用于这种需要频繁更新的场景。
  • 轻量数据库:比如SQLite,适合需要存储更多关联信息的复杂场景,但对于仅保存一个递增数值的需求来说过于繁琐。

内容的提问来源于stack exchange,提问作者VRQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:07:24