#!/bin/bash command="$1 $2 $3 $4 $5" while read -r line do ssh root@${line} "$command" done < /root/自动化上传/ip_list.txt这段shell脚本是正确的吗
时间: 2024-01-13 11:02:49 浏览: 21
这段脚本看起来基本上是正确的。它首先从命令行参数中读取要执行的命令和参数,然后从`ip_list.txt`文件中读取IP地址列表,逐个使用SSH远程登录到每个IP地址并在远程主机上执行给定的命令。
不过,需要注意以下几点:
1. 应该在执行脚本之前确保您已经配置好了SSH密钥认证。否则,每次SSH登录时都需要手动输入密码,这将会极大地降低执行速度并增加人工操作的难度。
2. 命令行参数中的参数个数应该与实际需要执行的命令参数个数一致。如果命令需要更多的参数,则应该相应地调整脚本。
3. 在执行SSH登录之前,应该确保远程主机处于开机状态并且网络连接正常。否则,SSH登录将失败,导致脚本终止。
希望这些提示能对你有所帮助。
相关问题
#!/bin/bash command="$1 $2 $3 $4 $5" while read -r line do ssh root@${line} "$command" done < /root/自动化上传/ip_list.txt为什么这个脚本执行命令的时候,只执行了第一台机器就结束了
这个脚本只执行了第一台机器然后就结束了,可能是因为在远程执行完命令后,SSH连接就立即关闭了,导致后续的远程命令无法执行。
为了解决这个问题,可以尝试在远程执行命令时添加一个`sleep`命令,让SSH连接在一段时间内保持打开状态,例如:
```bash
#!/bin/bash
command="$1 $2 $3 $4 $5"
while read -r line
do
ssh root@${line} "$command; sleep 1"
done < /root/自动化上传/ip_list.txt
```
在这个版本的脚本中,我们在远程执行命令的末尾添加了一个`sleep`命令,让SSH连接在执行完命令后保持打开状态1秒钟,以确保后续的远程命令可以被执行。你可以根据实际情况适当调整这个等待时间。
希望这个解决方案对你有所帮助。
#!/bin/bash command="$1 $2 $3 $4 $5" while read -r line do ssh root@${line} "$command" done < /home/babyzhang/ip_list.txt为什么这个脚本执行完第一个机器就结束了,怎么优化一下可以让它可以循环遍历执行列表里的每一台机器
这个脚本执行完第一个机器就结束的原因是,ssh命令会在远程主机上执行指定的命令,然后立即退出。因此,脚本只会连接到第一台机器,执行指定的命令,然后退出。
为了让脚本可以循环遍历列表里的每一台机器,可以将ssh命令放在一个循环中,每次循环连接到不同的主机,执行指定的命令。下面是优化后的脚本:
```bash
#!/bin/bash
command="$1 $2 $3 $4 $5"
while read -r line
do
ssh root@${line} "$command"
done < /home/babyzhang/ip_list.txt
```
这个脚本会循环遍历`ip_list.txt`文件中的每一行,每次读取一行IP地址,然后连接到对应的主机上执行指定的命令。注意,`ip_list.txt`文件中每一行只应该有一个IP地址。