编写Bash脚本:将远程设备命令结果输出至本地文本文件
修正后的多设备远程命令执行脚本
原脚本存在几处语法和逻辑问题,以下是问题点和修正后的完整实现:
原脚本问题梳理
- Shebang语法错误,正确写法应为
#!/bin/bash - 数组定义错误,Bash数组需用圆括号
()而非大括号{} - 循环语句错误,遍历设备需用
for而非if - 远程命令传递错误,多条命令需用引号包裹,避免被本地Shell提前解析
- 未捕获错误输出,默认仅标准输出存入文件,错误信息会直接打印在本地终端
修正后的脚本
#!/bin/bash # 定义目标设备数组 devices=(host1 host2) # 定义要执行的远程命令(双引号包裹确保完整传递给远程主机) commands="command1; command2; command3" # 遍历每台设备执行操作 for i in "${devices[@]}"; do echo "正在处理主机: ${i}" # 同时捕获标准输出和错误输出到本地文件 ssh "${i}" "${commands}" > "${i}_output.txt" 2>&1 echo "-------------------------------------------------------------" done
关键修改说明
- 修正Shebang:确保脚本由Bash解释执行
- 数组规范:用
()声明设备列表,"${devices[@]}"可兼容带空格的主机名 - 命令包裹:双引号包裹命令串,保证ssh将完整命令传递给远程主机执行
- 错误捕获:
2>&1将标准错误重定向到标准输出,让错误信息也能存入输出文件 - 循环语法:用
for循环正确遍历设备数组
内容的提问来源于stack exchange,提问作者Ben Noonan
相关产品推荐
相关产品推荐

