僅縮減 bash 輸出命令的特定部分

僅縮減 bash 輸出命令的特定部分

我有一個簡單的程序,我稱之為 ipsweep。它要做的就是 ping 一個 IP 位址,並顯示正在使用的 IP。

這是我第一次做的:

#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip
done

它有效,但它顯示了我不需要的資訊。我所需要的只是正在使用的 IP 位址。它顯示了每個 IP 的所有這些:

在此輸入影像描述

所以我嘗試添加一些過濾器,例如| grep "ping" | cut -d " " -f 2

#!/bin/bash
for ip in {1...254}; do
ping -c 1 $1.$ip | grep "ping" | cut -d " " -f 2 &
done

現在控制台只顯示IP,但它顯示所有IP,無論它是否在使用者中(我只需要正在使用的IP,我重複一遍)。我已經嘗試解決這個問題 5 個小時了,但仍然無法解決。我知道如果可以解決這個問題,但我不知道如何寫。

在此輸入影像描述

答案1

使用 ping 退出代碼確定主機是否存活:

#!/bin/bash
for ip in {1..254}; do
  ping -q -c 1 $1.$ip >2 2>&- && printf %s.%s\\n $1 $ip
done

答案2

首先,使用單一資料包檢查連接性是不明智的,但是:

# IP address 192.168.100.1 exists, 192.168.100.122 does not.
walt@bat:~(0)$ ping -c 1 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=63 time=2.76 ms

--- 192.168.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.763/2.763/2.763/0.000 ms
walt@bat:~(0)$ ping -c 1 192.168.100.122
PING 192.168.100.122 (192.168.100.122) 56(84) bytes of data.

--- 192.168.100.122 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

成功和失敗的範例都包含--- 192.168.100.122 ping statistics ---您正在偵測的“”行grep ping

你可以grep ", 0% packet loss"改為。

相關內容