如何在Shell脚本中循环执行SteamCMD的模组下载命令
DayZ模组批量下载Shell脚本优化方案
原脚本仅支持单个模组下载,优化后实现批量遍历模组ID列表下载,并且只启动一次SteamCMD、仅执行一次+quit,避免重复启动工具的开销。
修改后的完整脚本
#!/bin/bash # 定义需要下载的DayZ模组ID列表,可自行添加/删除 MOD_IDS=(1559212036 123456789 987654321) # DayZ的Steam应用ID固定为221100 DAYZ_APP_ID="221100" if [ "$ModEnabled" == "1" ]; then # 初始化SteamCMD命令参数 STEAMCMD_ARGS="+force_install_dir ${HOME}/servers/dayzserver/ +login \"${SteamUser}\"" # 遍历模组ID列表,拼接所有下载命令 for MOD_ID in "${MOD_IDS[@]}"; do STEAMCMD_ARGS+=" +workshop_download_item ${DAYZ_APP_ID} ${MOD_ID} validate" done # 添加退出命令,执行完整的SteamCMD调用 STEAMCMD_ARGS+=" +quit" # 执行批量下载 ${HOME}/servers/steamcmd/steamcmd.sh ${STEAMCMD_ARGS} printf "所有模组下载完成\n" else echo "ModEnabled变量未设置为1,跳过下载" fi
关键优化说明
- 模组ID管理:
MOD_IDS数组支持添加任意数量的创意工坊ID,用空格分隔即可,维护更方便 - 单次SteamCMD调用:通过参数拼接把所有下载命令整合为一次调用,彻底解决多次
+quit的问题,完全符合SteamCMD的执行逻辑 - 变量安全处理:给
ModEnabled、SteamUser等变量添加双引号,避免空变量或含空格的变量导致脚本报错 - 可选配置:
validate参数用于验证模组文件完整性,不需要的话可直接从拼接命令中删除
内容的提问来源于stack exchange,提问作者Plankt0n
相关产品推荐
相关产品推荐

