Bash: 如何在不使用任何文件的情况下测试 ping 的标准输出
Bash: how to test stdout of a ping without using any file
我想用脚本检索所有连接的主机:
for i in {1..9}
do
ping -c 1 -w 1 8.8.8.$i | grep ' 0%'
done
所以我想使用 if 添加一个条件,它将测试每个 ping 的输出(使用管道 grep) 是否为空,如果不为空则主机已启动。
干杯
p.s: 我想避免使用文件
使用ping
return代码判断机器状态。
for i in {1..9}
do
ping_status=$(ping -c 1 8.8.8.$i &> /dev/null && echo success || echo fail)
if [ $ping_status = success ]
then echo 'machine is up and running'
else
echo 'machine is down'
fi
done
How to set a variable to the output from a command in Bash?
for i in {1..9}
do
out="$(ping -c 1 -w 1 8.8.8.$i | grep ' 0%')"
if [ -z "$out" ]; then
# output empty
fi
done
您可以在 case/esac 中使用 glob 匹配。这避免了 grep
.
的昂贵分叉
for i in {1..9}; do
case $(ping -c 1 8.8.8.$i) in
(*" 0%"*)
echo something
;;
(*)
echo something else
;;
esac
done
只需检查 ping 命令的状态:
for i in {1..9}
do
if ping -c 1 -w 1 8.8.8.$i >/dev/null; then
echo "$i alive";
else
echo "$i dead"
fi
done
您可以像这样与 GNU Parallel
并行执行得更快:
parallel -j 64 -k 'ip=8.8.8.{}; ping -c 1 -t 1 $ip >/dev/null 2>&1; [ $? -eq 0 ] && echo $ip' ::: {1..254}
或者您可以这样使用 nmap
:
nmap -sP 8.8.8.* | tr -d "()" | awk '/Nmap scan report/{h=$NF} /Host is up/{print h}'
我想用脚本检索所有连接的主机:
for i in {1..9}
do
ping -c 1 -w 1 8.8.8.$i | grep ' 0%'
done
所以我想使用 if 添加一个条件,它将测试每个 ping 的输出(使用管道 grep) 是否为空,如果不为空则主机已启动。
干杯
p.s: 我想避免使用文件
使用ping
return代码判断机器状态。
for i in {1..9}
do
ping_status=$(ping -c 1 8.8.8.$i &> /dev/null && echo success || echo fail)
if [ $ping_status = success ]
then echo 'machine is up and running'
else
echo 'machine is down'
fi
done
How to set a variable to the output from a command in Bash?
for i in {1..9}
do
out="$(ping -c 1 -w 1 8.8.8.$i | grep ' 0%')"
if [ -z "$out" ]; then
# output empty
fi
done
您可以在 case/esac 中使用 glob 匹配。这避免了 grep
.
for i in {1..9}; do
case $(ping -c 1 8.8.8.$i) in
(*" 0%"*)
echo something
;;
(*)
echo something else
;;
esac
done
只需检查 ping 命令的状态:
for i in {1..9}
do
if ping -c 1 -w 1 8.8.8.$i >/dev/null; then
echo "$i alive";
else
echo "$i dead"
fi
done
您可以像这样与 GNU Parallel
并行执行得更快:
parallel -j 64 -k 'ip=8.8.8.{}; ping -c 1 -t 1 $ip >/dev/null 2>&1; [ $? -eq 0 ] && echo $ip' ::: {1..254}
或者您可以这样使用 nmap
:
nmap -sP 8.8.8.* | tr -d "()" | awk '/Nmap scan report/{h=$NF} /Host is up/{print h}'