这是我第一个使用我在网上找到的资源的bash脚本。我认为有一种更好的方法来编写这个可能使用其他形式的条件(如果那么vs控制运算符)。
这是一个基本上检查主机是启动还是关闭的脚本(检查它是否可以ping通)。您将所需的所有IP地址转储到文件中,然后运行调用该文件的脚本。文本文件如下所示:
8.8.8.8
4.8.8.8
4.4.4.4
127.0.0.1
实际脚本如下所示。 2>& 1是否必要,因为它没有。我不得不经常使用括号。
#!/bin/bash
while read line
do
A=$(ping -c 1 $line)
((echo $A | grep "64 bytes") > /dev/null 2>&1 && (echo "UP - "$line)) || echo "DOWN - "$line
done < $1
谢谢!
答案 0 :(得分:1)
你可以完全没有括号:
while read -r address; do
ping -c 1 $address >/dev/null 2>&1 && echo "UP - $address" || echo "DOWN - $address"
done < file
>/dev/null 2>&1
将STDOUT和STDERR重定向到/dev/null
,这意味着任何ping
输出都不会打印到您的终端。
然后,您可以使用&&
和||
运算符在成功的情况下回显消息(ping退出0
)或失败(ping退出>0
)
如果您愿意,可以使用if..then..else:
while read -r address; do
if ping -c 1 $address > /dev/null 2>&1; then
echo "UP - $address"
else
echo "DOWN - $address"
fi
done < file
答案 1 :(得分:1)
arco444有正确的答案。其他一些笔记
A && B || C
,如果A成功,则B执行;如果B失败,C将执行。 if A; then B; else C; fi
$ip
比$line