shell脚本如何实现把IP组里的ip逐个输出,并循环完成指定任务?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本如何实现把IP组里的ip逐个输出,并循环完成指定任务?相关的知识,希望对你有一定的参考价值。

例如有一组IP,我要逐个遍历ssh到指定ip完成任务。
host=192.168.1.1,192.168.1.2,192.168.1.3
for i in $host
do
scp XXX root@$host:~
ssh root@$host “执行命令”
done
要求循环完成复制文件到服务器并执行想应的命令。

$host这里应该怎么写,我一直没写出来,在线等,急~~~~谢谢!

参考技术A #!/bin/bash
host=192.168.1.1,192.168.1.2,192.168.1.3
array=(`echo $host|tr ',' ' '`)
for ip in $array[@];do
scp XXX root@$ip:~
ssh root@$ip << ressh
执行命令
exit
ressh
done
参考技术B 使用awk:
host=192.168.1.1,192.168.1.2,192.168.1.3
echo $host|awk -F ',' 'for(i=1;i<=NF;i++) print $i'
假如想做操作,可以把print换掉。
参考技术C SAVEIFS=$IFS
IFS=,
host=192.168.1.1,192.168.1.2,192.168.1.3
for i in $host
do
scp XXX root@$i:~
ssh root@$i "执行命令"
done
IFS=$SAVEIFS
参考技术D #!/bin/bash

host=192.168.1.1,192.168.1.2,192.168.1.3
echo -e $host//,/\\n追问

#!/bin/bash
host=192.168.1.1,192.168.1.2,192.168.1.3
for i in $host//,/\\n
do
echo $i
done
这样写的话也不是遍历,执行结果是这样的:192.168.1.1\n192.168.1.2\n192.168.1.3

linux中shell用nali查询IP后比对数据输出对应的地区的脚本怎么写

数据1:北方地区列表.txt ;数据2:南方地区列表.txt 数据3:IP地址
用 “nali IP” 后会显示IP对应的地区,然后把这个地区在数据1与数据2中对比,然后显示出每个IP对应的是在南方地区还是北方地区(格式为:IP 所在城市 地区<南方/北方>),求喜欢linux shell脚本的高手

参考技术A 你这个问题有歧义,北方和南方数据既然已经在数据1和数据2里面了,干嘛还要对比呢?追问

。。。1 跟2是南方地区跟北方地区的列表,我是要根据查询IP显示的地址(湖北),去那2个表中找,最后会在数据2中找到湖北,就在此IP后面显示 湖北 南方,简单说来就是查找数据对比输出,可是不会写

参考技术B nali 是一个linux命令?追问

我晕。

追答

#!/bin/sh
IP=$1
diqu=`nali $IP | cut -d"[" -f2`
diqu=$diqu//]/
grep -v "^#" 北方.txt | grep $diqu > /dev/null
if [[ $? = 0 ]]; then
echo "$IP $diqu 地区"
fi
grep -v "^#" 南方.txt | grep $diqu > /dev/null
if [[ $? = 0 ]]; then
echo "$IP $diqu 地区"
fi

不过nali 查到的都是这类信息:
[root@puppetclient04 sh]# nali 202.120.2.101
202.120.2.101[上海交通大学 网络中心]

你列表里是什么格式。

追问

吉林
辽宁
。。。
是的 nali之后就是那个样子 然后再去表里对比输出
202.120.2.101[上海交通大学 网络中心] 南方
123.150.161.222[天津市 联通] 北方
这种格式的,可是还有一点,要是iplist里面的IP很多,nali输出之后就没有换行,全挤在一起了,怎么换行显示啊,每一行对应一条数据

追答

#!/bin/sh
iplist=`cat iplist`
for ip in $iplist
do
diqu=`nali $ip | cut -d"[" -f2`
diqu=`echo $diqu//]/ | cut -d" " -f1`
grep -v "^#" 北方地区列表.txt | grep $diqu > /dev/null
if [[ $? = 0 ]]; then
echo "$ip $diqu 地区"
fi
grep -v "^#" 南方地区列表.txt | grep $diqu > /dev/null
if [[ $? = 0 ]]; then
echo "$ip $diqu 地区"
fi
done

1、我不知道你说的iplist是什么形式的,在这我假设它是一个文件,里面存放的各种ip。
2、上面的shell还有一个问题,如果你的列表内只具体到城市而nali查出来的具体到了城市的某一区域,就显示不出来了。我没对nali查出来的内容做太多修改。
现在我只把用nali查出来的信息截取到: "上海交通大学" 、 "天津市" 这种程度。

本回答被提问者采纳

以上是关于shell脚本如何实现把IP组里的ip逐个输出,并循环完成指定任务?的主要内容,如果未能解决你的问题,请参考以下文章

统计Apache或Nginx访问日志里的独立IP访问数量的Shell

编写shell脚本不停地telnet一个ip或域名,并输出结果到文件中

Linux系统shell脚本之打印系统的IP信息

linux中shell用nali查询IP后比对数据输出对应的地区的脚本怎么写

shell脚本自动加黑恶意攻击IP

shell脚本自动加黑恶意攻击IP