循环多个地址: ping 并将数据放入文件中

循环多个地址: ping 并将数据放入文件中

我希望能够有一个脚本:

  1. 查看 IP 地址列表
  2. ping 地址之一
  3. 获取数据并将其放入文件中
  4. 移动到下一个IP

到目前为止我有:

cd /Path/to/addressees || exit 1
for targethost in a b c; do
  {ping {targethost}
      echo $'\n'"finished:
  } >"$log_file" 2>&1
done

当我运行这个时,我收到错误:

./ping_address: line 3: cd: /path/to/ip_adress: No such file or directory
./ping_address: line 7: unexpected EOF while looking for matching `"'
./ping_address: line 8: syntax error: unexpected end of file

我对 Unix 上的脚本编写还是有点陌生​​,所以任何帮助都会非常有帮助!

答案1

几件事:

  1. 您无法 cd 到文件(您可以使用测试-f来查看该文件是否存在 - 见下文。)
  2. 我不确定您是否使用了“ab c” - 这些变量应该包含地址?目前尚不清楚您的地址是否嵌入到脚本中或存储在文件中。
  3. 一般来说,您需要一个 $ 来引用变量(即,${targethost}不是targethost),在$分配时省略 。

为什么不是这样的(假设你有一个名为 ip_addresses 的文件,每行一个地址,或者空格分隔的地址。)

#!/bin/bash
IP_FILE="/tmp/ip_address_file" # The file with the IP addresses
LOGFILE="/tmp/log_results"  # Where the results will be stored
if [[ ! -f ${IP_FILE} ]]; then
   echo "No File!"
   exit 1
fi
for IP_ADDRESS in $(cat $IP_FILE); do
   echo "TEST FOR ${IP_ADDRESS}" >> $LOGFILE
   # The -c 1 means send one packet, and the -t 1 means a 1 second timeout    
   ping -c 1 -t 1 ${IP_ADDRESS} >> $LOGFILE 2>&1 
done

或者,如果您想为每个 IP 创建一个文件,您可以使用以下内容:

#!/bin/bash
IP_FILE="/tmp/ip_address_file" # The file with the IP addresses
if [[ ! -f ${IP_FILE} ]]; then
   echo "No File!"
   exit 1
fi
for IP_ADDRESS in $(cat $IP_FILE); do
   echo "TEST FOR ${IP_ADDRESS}"
   # The -c 1 means send one packet, and the -t 1 means a 1 second timeout    
   ping -c 1 -t 1 ${IP_ADDRESS} >> ${IP_ADDRESS}.log 2>&1 
done

如果您想在脚本中嵌入 IP:

#!/bin/bash
IPS='1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 5.5.5.5'
if [[ ! -f ${IP_FILE} ]]; then
   echo "No File!"
   exit 1
fi
for IP_ADDRESS in ${IPS}; do
   echo "TEST FOR ${IP_ADDRESS}"
   # The -c 1 means send one packet, and the -t 1 means a 1 second timeout    
   ping -c 1 -t 1 ${IP_ADDRESS} >> ${IP_ADDRESS}.log 2>&1 
done

答案2

没有比这更明显的了:

  1. /path/to/ip_adress必须在运行脚本之前创建该目录。
  2. "finished:末尾缺少一个“
  3. 第三个错误只是第二个错误的结果。

相关内容