while read line; do telnet $line; done < "/tmp/1.log" 执行后只会一次
时间: 2024-03-01 17:53:01 浏览: 16
这是因为 `telnet` 命令默认是以交互模式运行的,需要手动输入命令才能执行。你可以通过在命令后面加上需要执行的命令来实现自动执行,例如:
```
while read line; do echo "command" | telnet $line; done < "/tmp/1.log"
```
其中 `command` 是你要执行的命令。这样就可以自动执行命令了。另外,你还可以使用 `expect` 工具来实现自动化交互,更为灵活和强大。
相关问题
while read line; do echo $line; done </etc/passwd cat /etc/passwd | while read line; do echo $line; done
这两条语句都是用来读取文件 `/etc/passwd` 中的每一行内容,并将其输出到终端中。
1. `while read line; do echo $line; done </etc/passwd`: 这条语句使用了输入重定向符 `<`,将文件 `/etc/passwd` 中的内容读取并通过标准输入传递给 `while` 循环。`read` 命令用于读取一行内容并赋值给变量 `line`,然后将其输出到终端中,直到文件末尾。
2. `cat /etc/passwd | while read line; do echo $line; done`: 这条语句使用了管道符 `|`,将 `cat /etc/passwd` 的输出结果传递给 `while` 循环。`read` 命令用于读取一行内容并赋值给变量 `line`,然后将其输出到终端中,直到管道符左边的命令输出结束。
#!/bin/bash command="touch /root/ans.txt" while read -r line do ssh root@${line} "$command" done < /home/babyzhang/ip_list.txt我要这个脚本执行的详细过程
好的,这个脚本的作用是在 `/home/babyzhang/ip_list.txt` 文件中读取一行行的 IP 地址,然后通过 SSH 连接到这些 IP 地址对应的主机上,并在主机的 `/root` 目录下创建一个名为 `ans.txt` 的空文件。
脚本执行的详细过程如下:
1. 定义变量 `command`,该变量的值是字符串 `touch /root/ans.txt`,用于在远程主机上执行创建文件的命令。
2. 使用 `while read -r line` 循环读取 `/home/babyzhang/ip_list.txt` 文件中的每一行,并将当前行的内容赋值给变量 `line`。
3. 在循环体中,使用 `ssh root@${line} "$command"` 命令连接到变量 `line` 中指定的远程主机,并执行变量 `command` 中定义的命令。其中,`${line}` 表示当前循环到的主机 IP 地址。
4. 循环结束后,脚本执行完成。
需要注意的是,该脚本需要在拥有 SSH 权限的用户下执行,且在执行前需要将 `/home/babyzhang/ip_list.txt` 文件中的 IP 地址替换为实际需要连接的主机 IP 地址。