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开始。想了解如何通过外部文件存储变量并实现永久更新,或其他可行的解决方法。
方法一:用外部文件存储集数(推荐)
这是最直接可靠的方案,通过单独的文件保存集数值,脚本每次读取文件内容作为当前集数,执行完成后将递增后的数值回写文件。
步骤:
- 先创建一个存储集数的文件(比如
episode_num.txt),首次运行前写入初始值1800:
echo 1800 > episode_num.txt
- 修改后的脚本如下:
#!/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
相关产品推荐
相关产品推荐

