我希望能够有一个脚本:
- 查看 IP 地址列表
- ping 地址之一
- 获取数据并将其放入文件中
- 移动到下一个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
几件事:
- 您无法 cd 到文件(您可以使用测试
-f
来查看该文件是否存在 - 见下文。) - 我不确定您是否使用了“ab c” - 这些变量应该包含地址?目前尚不清楚您的地址是否嵌入到脚本中或存储在文件中。
- 一般来说,您需要一个 $ 来引用变量(即,
${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
没有比这更明显的了:
/path/to/ip_adress
必须在运行脚本之前创建该目录。"finished:
末尾缺少一个“- 第三个错误只是第二个错误的结果。