免费注册 查看新帖 |

Chinaunix

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

循环打印数组的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-16 21:19 |只看该作者 |倒序浏览
本帖最后由 00306 于 2011-10-16 21:21 编辑

有a.txt文件,内容为:
  1. 192.168.0.25 /home/key/test1 22 test1
  2. 192.168.0.26  /home/key/test2 33 test2
复制代码
现在想通过使用数组的方式去执行连接命令
a.sh

  1. #!/bin/bash
  2. for i in $(cat a.txt)
  3. do
  4.       ssh -p ${i[2]}  -i ${i[1]} root@${i[0]}
  5. done
复制代码
我想得到的结果是
ssh -p 22 -i /home/key/test1 root@192.168.0.25
ssh -p 33 -i /home/key/test2 root@192.168.0.26

调试发现它的结果是 :

  1. ssh -p 192.168.0.25 -i root@
  2. ssh -p /home/key/test1 -i root@
  3. ssh -p 22 -i root@
  4. ssh -p test1 -i root@
  5. ssh -p 192.168.0.26 -i root@
  6. ssh -p /home/key/test2 -i root@
  7. ssh -p 33  -i root@
  8. ssh -p test2  -i root@
复制代码
各位高人有没有什么好办法?

论坛徽章:
0
2 [报告]
发表于 2011-10-16 21:45 |只看该作者
#!/bin/bash
while read line
do
        i=($line)
       echo "      ssh -p ${i[2]}  -i ${i[1]} root@${i[0]}"
done < a.txt

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2011-10-16 21:56 |只看该作者
回复 1# 00306


$ cat a.sh
#!/bin/bash
while read ip id port name
do
     echo "ssh -p $port -i $id root@$ip"
done < a.txt

$ bash a.sh
ssh -p 22 -i /home/key/test1 root@192.168.0.25
ssh -p 33 -i /home/key/test2 root@192.168.0.26

论坛徽章:
0
4 [报告]
发表于 2011-10-16 22:42 |只看该作者
本帖最后由 00306 于 2011-10-16 23:09 编辑

楼上两位的都可以运行,只不过都有个相同的问题,就是只循环一次,用sh -x调试发现
执行了ssh -p 22 -i /home/key/test1 root@192.168.0.25后,不会再执行ssh -p 33 -i /home/key/test2 root@192.168.0.26
例如,我让它打印这两台机器的eth0网卡信息:

  1. [root@mytest ~]# cat a.txt
  2. 192.168.0.25  22  /root/.ssh/test1
  3. 192.168.0.26  33  root/.ssh/test2

  4. [root@mytest ~]# cat test.sh
  5. #!/bin/bash

  6. LIST=/tmp/a.txt
  7. while  read LINE
  8. do       
  9.         i=($LINE)
  10.         ssh -p ${i[1]} -i ${i[2]} root@${i[0]} "ifconfig eth0"
  11. done < $LIST

  12. [root@mytest ~]# sh -x test.sh
  13. + LIST=/tmp/a.txt
  14. + read LINE
  15. + i=($LINE)
  16. + ssh -p 22 -i /root/.ssh/test1 root@192.168.0.25 'ifconfig eth0'
  17. eth0      Link encap:Ethernet  HWaddr 00:24:E8:52:1A:82  
  18.           inet addr:192.168.0.25  Bcast:192.168.0.28  Mask:255.255.255.248
  19.           inet6 addr: fe80::224:e8ff:fe52:1a82/64 Scope:Link
  20.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  21.           RX packets:2012689692 errors:0 dropped:6801 overruns:0 frame:0
  22.           TX packets:2010566271 errors:0 dropped:0 overruns:0 carrier:0
  23.           collisions:0 txqueuelen:1000
  24.           RX bytes:1324175748591 (1.2 TiB)  TX bytes:1014314683136 (944.6 GiB)
  25.           Interrupt:169 Memory:f8000000-f8012100

  26. + read LINE

复制代码
用echo打印的时候是正常的

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
5 [报告]
发表于 2011-10-17 01:01 |只看该作者
回复 4# 00306


改成这样试试:
  1. ssh -p ${i[1]} -i ${i[2]} root@${i[0]} "ifconfig eth0"&
复制代码

论坛徽章:
1
双子座
日期:2013-10-17 00:46:45
6 [报告]
发表于 2011-10-17 01:11 |只看该作者
回复 4# 00306


    执行ifconfig后,加个exit试试,可能是你登陆了远程机器没退出。

论坛徽章:
0
7 [报告]
发表于 2011-10-17 01:24 |只看该作者
回复  00306


    执行ifconfig后,加个exit试试,可能是你登陆了远程机器没退出。
xrzs1986 发表于 2011-10-17 01:11



在ifconfig eth0后加了exit一样的,应该不是没退出的问题,而是再次循环的时候读到的是空的

论坛徽章:
0
8 [报告]
发表于 2011-10-17 01:26 |只看该作者
本帖最后由 00306 于 2011-10-17 09:23 编辑
回复  00306


改成这样试试:
Shell_HAT 发表于 2011-10-17 01:01


这样做可以正常运行,但是有没有不需要放后台的办法呢?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2011-10-17 09:22 |只看该作者
回复 8# 00306


并发一般都是这个思路吧

论坛徽章:
0
10 [报告]
发表于 2011-10-17 09:25 |只看该作者
回复  00306


并发一般都是这个思路吧
Shell_HAT 发表于 2011-10-17 09:22


因为我想取到它的运行状态是成功还是不成功
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP