免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1896 | 回复: 8
打印 上一主题 下一主题

请教一个数组匹配的问题,实在整不会,上来发帖求教(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-11 13:17 |只看该作者 |倒序浏览
nodeip=(
122.224.73.163
122.224.73.164
122.224.73.165
222.88.57.247
113.140.1.214
)

closeip=(
222.88.57.247
113.140.1.214
)

我要实现的echo nodeip中,不包括closeip的ip,请问怎么实现?
上例中,就是排除
222.88.57.247
113.140.1.214
输出
122.224.73.163
122.224.73.164
122.224.73.165
谢谢!

[ 本帖最后由 root0 于 2009-9-11 17:57 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-09-11 13:34 |只看该作者
试试这个:

nodeip=(
122.224.73.163
122.224.73.164
122.224.73.165
222.88.57.247
113.140.1.214
)

closeip=(
222.88.57.247
113.140.1.214
)

together=(${nodeip[@]} ${closeip[@]})
echo ${together[@]}
s_together=`echo ${together[@]} | sed 's/[ \t]/\n/g' | sort | uniq -c | awk '{if ($1==1) print $2}'`
echo ${s_together[@]}

输出:
122.224.73.163 122.224.73.164 122.224.73.165

论坛徽章:
0
3 [报告]
发表于 2009-09-11 13:48 |只看该作者
我用for呢?
比如我提取出那3个IP后,分别去ping 10个包

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2009-09-11 13:58 |只看该作者

回复 #3 root0 的帖子

  1. #! /bin/bash

  2. nodeip=(
  3. 122.224.73.163
  4. 122.224.73.164
  5. 122.224.73.165
  6. 222.88.57.247
  7. 113.140.1.214
  8. )

  9. closeip=(
  10. 222.88.57.247
  11. 113.140.1.214
  12. )

  13. for ip in ${nodeip[@]}
  14. do
  15.         if echo ${closeip[@]} | grep -Eq "\<$ip\>"
  16.         then
  17.                 echo "IP $ip is closed"
  18.         else
  19.                 ping ......
  20.         fi
  21. done
复制代码

论坛徽章:
0
5 [报告]
发表于 2009-09-11 14:00 |只看该作者
  1. for ((i=1;i<=${#nodeip[@]};i++))
  2. do
  3.   echo ${closeip[*]} | grep ${nodeip[i]} || ping -c 10 ${nodeip[i]}
  4. done
复制代码

论坛徽章:
0
6 [报告]
发表于 2009-09-11 14:07 |只看该作者
原帖由 ywlscpl 于 2009-9-11 14:00 发表
for ((i=1;i

我先就是用的这个办法,好像不得行。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
7 [报告]
发表于 2009-09-11 14:09 |只看该作者

回复 #5 ywlscpl 的帖子

单词边界还是要的,不然
echo 222.88.57.247 | grep 222.88.57.24
是匹配成功的

论坛徽章:
0
8 [报告]
发表于 2009-09-11 14:20 |只看该作者

回复 #7 ly5066113 的帖子

多谢指正,没考虑仔细,输出也得屏蔽了
改下
  1. for ((i=1;i<=${#nodeip[@]};i++))
  2. do
  3.   echo ${closeip[*]} | grep -Eq "\<${nodeip[i]}\>" || ping -c 10 ${nodeip[i]}
  4. done
复制代码

论坛徽章:
0
9 [报告]
发表于 2009-09-11 14:57 |只看该作者
谢谢大家,问题解决了。呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP