我有一个我在工作中使用的脚本,我想稍微扩展一下。我正在使用的脚本将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地址并从这里将它们提供给脚本。有什么想法吗?
答案 0 :(得分: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
答案 1 :(得分:2)
我会使用while循环并使用set解析从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地址并将其推送到脚本中
答案 2 :(得分: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[@]}"