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

如何将GitHub进度条脚本整合到SSH批量执行循环中?

如何将Shell进度条整合到批量SSH执行循环中?

没问题,咱们把这个进度条完美整合到你的批量SSH脚本里就行。核心思路是让进度条知道总服务器数量和当前完成的服务器数,这样就能准确显示执行进度了。

整合后的完整脚本

#!/bin/bash

# 1. 先定义进度条函数(直接复用你提供的版本)
function ProgressBar {
    # Process data
    let _progress=(${1}*100/${2}*100)/100
    let _done=(${_progress}*4)/10
    let _left=40-$_done
    # Build progressbar string lengths
    _fill=$(printf "%${_done}s")
    _empty=$(printf "%${_left}s")
    # Print progress bar
    printf "\rProgress : [${_fill// /#}${_empty// /-}] ${_progress}%%"
}

# 2. 获取服务器总数(从server文件里统计行数)
total_servers=$(wc -l < server)
current_server=0

# 3. 批量SSH执行循环,同步更新进度条
for i in $(cat server)
do
    # 每次循环先计数+1
    ((current_server++))
    
    # 执行SSH命令,把输出写入指定文件(避免干扰进度条显示)
    ssh -o "BatchMode=yes" -o StrictHostKeyChecking=no "$i" " (df -h /var | tr '\n' ',') & (hostname)| tr '\n' ',' " 2>&1 >> /tmp/check_var2.csv
    
    # 更新进度条
    ProgressBar $current_server $total_servers
done

# 循环结束后换行,显示完成提示
printf '\nFinished!\n'

关键细节说明

  • 获取总服务器数:用wc -l < server快速统计server文件里的服务器条目数,作为进度条的总任务数。
  • 计数与进度更新:每次循环开始时先把当前完成数current_server加1,执行完SSH操作后调用进度条函数,确保进度和实际执行同步。
  • 输出隔离:把SSH的输出直接追加到/tmp/check_var2.csv,避免和进度条的终端输出互相干扰,保证进度条始终在一行更新。

这样运行脚本时,终端会实时显示进度条的推进,每完成一台服务器的检查,进度条就会更新一次,所有任务完成后会显示Finished!的提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:13:13