shell编程中while与for的区别

shell编程中常用的循环:while 和 for,在使用的过程中,会发现一些差别。

 1. 代码

 1 #!/bin/bash
 2 
 3 # while loop
 4 echo -en "\t";date
 5 cat abc.txt|while read user ip
 6 do
 7 {
 8     ssh -oConnectTimeout=10 $user@$ip "hostname" < /dev/null
 9     sleep 10s
10 } &
11 done
12 wait
13 echo "This is while loop."
14 echo -en "\t";date
15 
16 sleep 10s
17 echo -e "\n"
18 
19 # for loop
20 echo -en "\t";date
21 for line in `cat abc.txt|sed -e 's/ /--/g'`
22 do
23 {
24     user=`echo $line|awk -F '--' '{print $1}'`
25     ip=`echo $line|awk -F '--' '{print $2}'`
26     ssh -oConnectTimeout=10 $user@$ip "hostname"
27     sleep 10s
28 } &
29 done
30 wait
31 echo "This is for loop."
32 echo -en "\t";date
View Code
1 root 192.168.1.100
2 root 192.168.1.101
abc.txt

 

2. 执行

执行上面的shell脚本,会得到下面的结果

 

3. 总结

从代码可以看出

  while循环:以行读取文件,默认分隔符是空格或者Tab;循环体内有ssh、scp的时候,需要加上</dev/null不加的话,执行一次循环就退出

  for循环:以空格读取文件,也就是碰到空格,就开始执行循环体,所以需要以行读取的话,就要把空格转换成其他字符

 

从执行结果可以看出

  while循环:wait没起到作用,循环体在后台执行,后面的命令也同时在执行;

  for循环:循环体在后台执行,等待循环体全部执行结束,后面的命令接着执行。

posted @ 2013-09-08 10:25  trdcaz  阅读(782)  评论(4)    收藏  举报