如何将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
相关产品推荐
相关产品推荐

