Chinaunix首页 | 论坛 | 博客
  • 博客访问: 60777
  • 博文数量: 5
  • 博客积分: 42
  • 博客等级: 民兵
  • 技术积分: 132
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-07 16:15
文章分类

全部博文(5)

文章存档

2014年(1)

2013年(4)

分类: LINUX

2013-10-29 15:57:40

写shell脚本的时候,经常需要逐行读取文件内容,而我们常常采用while read line重定向到文件,但是执行过程则会遇到问题:
cat list
172.16.50.175   t-1
172.16.50.176   t-2
172.16.50.177   t-3
172.16.50.178   t-4
172.16.50.179   t-5

cat get_hostname.sh

点击(此处)折叠或打开

  1. #!/bin/sh
  2. cat list | while read line
  3. ip=`awk '{print $1}' tmp`
  4. do
  5. ssh $ip "hostname"
  6. done
下面来看执行结果:
test-1.XXX.com
啊哦,似乎while循环只执行了一行就不在执行了,这个很糟糕
那么如何来改进这个脚本呢?

点击(此处)折叠或打开

  1. #!/bin/sh
  2. exec 3< list
  3. while read -u3 line
  4. do
  5. ip=`echo $line |awk '{print $1}'`
  6. ssh $ip "hostname"
  7. done
  8. exec 3<&-
好,再来执行,查看结果:
test-1.XXX.com
test-2.XXX.com
test-3.XXX.com
test-4.XXX.com
test-5.XXX.com

好,结果是我们想要的。
至于为什么,自己仔细思考




阅读(2674) | 评论(1) | 转发(0) |
1

上一篇:没有了

下一篇:shell脚本的一些注意事项

给主人留下些什么吧!~~

itxx2013-11-08 12:55:22

感觉有点麻烦,试试 while read line; do something; done < filename