无线&移动互联网技术研发

换位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

控制流结构——for

Posted on 2009-11-29 12:06 Gavin.lee 阅读(206) 评论(0)  编辑  收藏 所属分类: Linux shell 入门

 

for循环
for 变量名 in 列表
do
       命令 1
       命令 2
done
当变量值在列表里,for循环即执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的shell命令和语句。变量名为任何单词。in列表用法是可选的,如果不用它, for循环使用命令行的位置参数。in列表可以包含替换、字符串和文件名,下面看一些例子。
Shell代码
  1. /home/l/g/tomotoboy/for >cat fortest   
  2. #!/bin/sh   
  3. #for_i   
  4. for loop in 1 2 3 4 5 6  
  5. do   
  6.     echo $loop   
  7. done   
  8.   
  9. #forlist   
  10. for loop in "orange red blue grey"  
  11. do   
  12.    echo $loop   
  13. done   
  14.   
  15. #forls   
  16. for loop in `ls`   
  17. do   
  18.      echo $loop   
  19. done   
  20.   
  21.   
  22. #forparam   
  23. for params   
  24. do   
  25.      echo "you supplied $params as command line option"  
  26.      echo $params   
  27. done   
  28.   
  29. for params in "$@"  
  30. do   
  31.      echo "you supplied $params as command line option"  
  32.      echo $params   
  33. done   
  34.   
  35. #forcommand   
  36. for loop   
  37. do   
  38.       find `pwd` -name $loop -print   
  39. done   
  40.   
  41.   
  42. /home/l/g/tomotoboy/for >fortest fortest   
  43. 1  
  44. 2  
  45. 3  
  46. 4  
  47. 5  
  48. 6  
  49. orange red blue grey   
  50. fortest   
  51. you supplied fortest as command line option   
  52. fortest   
  53. you supplied fortest as command line option   
  54. fortest  


使用for循环连接服务器
因为for循环可以处理列表中的取值,现设变量为网络服务器名称,并使用for循环连接每一服务器。
Shell代码
  1. #!/bin/sh   
  2. #forping   
  3. HOSTS="sina.com cqu.edu.cn baidu.com"  
  4. for loop in $HOSTS   
  5. do   
  6.      ping -c 2 $loop   
  7. done  
多文件转换
匹配所有以.sed结尾文件并将其转换为大写。这里使用了 l s和cat命令。l s用于查询出相关文件,cat用于将之管道输出至trr命令。目标文件扩展名为.UC,注意在for循环中使用l s命令时反引号的用法。
Shell代码
  1. #!/bin/sh   
  2. #forstr   
  3. for files in `ls *.sed`   
  4. do   
  5.     cat $files |tr "[a-z]"  "[A-Z]" >$files.UC   
  6. done   
  7.   
  8. /home/l/g/tomotoboy >cat change.sed   
  9. #!/bin/sed -f   
  10. #change.sed   
  11. /tomotoboy/ c\   
  12. I love China,Ilove Wanzhi.   
  13. /home/l/g/tomotoboy >ls *.UC   
  14. append.sed.UC  change.sed.UC   
  15. /home/l/g/tomotoboy >cat change.sed.UC   
  16. #!/BIN/SED -F   
  17. #CHANGE.SED   
  18. /TOMOTOBOY/ C\   
  19. I LOVE CHINA,ILOVE WANZHI.  


多sed删除操作
下面的例子中,sed用于删除所有空文件,并将输出导至以 . HOLD.为扩展名的新文件,mv将这些文件移至初始文件中。
Shell代码
  1. #!/bin/sh   
  2. #forsed   
  3. for files in `ls *.sed`   
  4. do   
  5.    sed -e "/^$/d" $files > $files.HOLD   
  6.    mv $files.HOLD $files   
  7. done  


循环计数
前面讨论expr时指出,循环时如果要加入计数,使用此命令。下面使用 l s在for循环中列出文件及其数目。
Shell代码
  1. /home/l/g/tomotoboy >cat forcount   
  2. #!/bin/sh   
  3. #forcount   
  4. count=0  
  5. for files in *   
  6. do   
  7.   count=`expr $count + 1`   
  8. done   
  9. echo "There are $count files in `pwd` we need to process"  


只有注册用户登录后才能发表评论。


网站导航: