bash - 逐行获取 - 由管道引起的错误?

时间:2014-06-12 14:04:48

标签: bash

我正在尝试读取文件servers.txt并ping其中的每一行。 它包含每行的服务器。

#!/bin/bash
clear
output="pingtest.txt"
for line in < cat "servers.txt"
do 
ping $line >> "$output" 2>&1
done

但是脚本根本不起作用,因为&#39;&lt;&#39;在第4行。 我做错了什么?

2 个答案:

答案 0 :(得分:3)

for循环遍历基本上位置参数。它不从标准输入读取。 read从标准输入读取。

你想要

while read line; do
  …
done < "servers.txt"

这是the very first BASH FAQ。

答案 1 :(得分:0)

如果您想坚持使用for循环,可以试试这个:

#!/bin/bash
clear
output="pingtest.txt"
for line in `cat servers.txt`
do 
    ping -c 1 -W 1 ${line} >> ${output} 2>&1
done

此外,您还需要为ping命令提供计数和超时。

c:您要ping服务器的次数

W:等待服务器响应的时间