如何调整Bash脚本实现远程服务器服务状态查询输出格式化对齐
Bash 脚本多服务器服务状态查询格式优化方案
你可以直接使用修改后的如下脚本,即可实现预期的左对齐单行输出效果:
#!/bin/bash USERNAME=vagrant isengine=(server1 server2 server3 server4 server5) isengine_services=( ds.rc DFDServer ISFAgents ODFEngine) # 清空临时文件避免历史内容干扰 > tmp.txt for h in "${isengine[@]}" do echo "${h}" >> tmp.txt # 输出服务器名后加空行,符合预期格式 echo "" >> tmp.txt for i in "${isengine_services[@]}" do sshpass -p "mysecret" ssh -o StrictHostKeyChecking=no "${USERNAME}"@"${h}" "printf '%-12s' '${i}'; systemctl status ${i} | grep Active | sed 's/^ *//'" >> tmp.txt # 每条状态单独占一行 echo "" >> tmp.txt done done cat tmp.txt
关键改动说明
- 合并原远程执行的两条输出命令:使用
printf '%-12s'指定服务名左对齐占12个字符宽度(可根据你实际最长服务名长度调整数值),直接将服务名与状态行拼接为同一行 - 新增
sed 's/^ *//'处理,清除Active状态行前的多余缩进空格,排版更整洁 - 新增服务器名称输出后的空行,完全匹配你期望的输出格式
- 开头新增清空临时文件的逻辑,避免多次运行时历史内容叠加干扰
内容的提问来源于stack exchange,提问作者Andrew Ramnikov
相关产品推荐
相关产品推荐

