2

我有一个我在工作中使用的脚本,我想稍微扩展一下。我当前使用的脚本将 IP 地址作为 arg 并将 zip 文件推送到该设备上的特定目录。该设备是 Android 设备,我推送到的特定目录用于使用推送的新数据触发设备恢复。

我正在寻找一种方法来扫描网络,识别所有连接的 android 设备,然后将新固件推送到每个设备。由于推送部分已经很容易完成,我需要它来找到一种方法来扫描和识别每个连接设备的 IP。

我想出了:

nmap -sL 10.111.1.0/24 | grep android | grep -oE '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

它将通过网络反弹,在该行中找到任何带有“android”的内容,然后解析并返回这些行的 IP 地址。问题是,我不知道如何一次获取一个 IP 地址并将它们从这里提供给脚本。有任何想法吗?

4

3 回答 3

2

我会使用一个while循环并用一组解析你从grep中得到的任何东西。

(nmap -sL 10.111.1.0/24 | grep android | grep -oE '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | \
while read -a device; do
    echo ${device[0]}
    echo ${device[1]}
    ...
    /path/to/script ${device[2]} #the number that represents the ip address (I don t know wich one it will be depends what your grep gives)
 done)

现在您可以获取IP地址并将其推送到脚本中

于 2013-06-11T14:08:34.443 回答
2

您可以在任何时候使用 for 循环和子 shell 来对管道的结果进行操作:

for ip in $( nmap -sL 10.111.1.0/24 | grep android | grep -oE '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' ); do
  echo "W00t! I found this ${ip}"
  /path/to/script "${ip}"
done
于 2013-06-11T13:56:05.373 回答
1

将其读入数组:

read -a devices < <(nmap -sL 10.111.1.0/24 | grep android | grep -oE '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}')

然后将其发送到脚本:

/path/to/script "${devices[@]}"
于 2013-06-11T14:22:01.520 回答