设为首页 收藏本站
查看: 858|回复: 0

shell ——for in 循环

[复制链接]

尚未签到

发表于 2018-8-16 13:31:04 | 显示全部楼层 |阅读模式
  shell 编程——for in 循环

-------for in 格式-------  


  • for 无$变量 in 字符串
  • do
  •   $变量
  • done
  


一简单的字符串 枚举遍历法,利用for in格式对字符串按空格切份的功能  


  • SERVICES="80   22   25   110   8000   23   20   21   3306   "

  • for   x   in   $SERVICES
  •   do
  •   iptables   -A   INPUT   -p   tcp   --dport   $x   -m   state   --state   NEW   -j   ACCEPT
  •   done
  


-------for variable in values--------------字符串数组依次赋值  


  • #!/bin/sh
  • for i in a b c           字符串列表A B C
  •          字符串用空格分隔,没有括号,没有逗号, 然后循环将其依次赋给变量i
  •          变量没有$
  • do
  • echo "i is $i"
  • done
  

[macg@machome ~]$ sh test.sh
i is a
i is b
i is c
-------for in 里,变量和*不等价-------  


  • #!/bin/bash
  • for i in *.h ;
  • do
  • cat ${i}.h
  • done
  

[macg@vm test]$ ./tip.sh
cat: *.h.h: No such file or directory
$i代表的是整个路径,而不是*.h里的.h前面的部分
改正  


  • #!/bin/bash
  • for i in *.h
  • do
  • cat $i
  • done
  

[macg@vm test]$ echo hahaha >>1.h
[macg@vm test]$ echo ha >>2.h
[macg@vm test]$ ./tip.sh
hahaha
ha   
例2:  


  • for i in /etc/profile.d/*.sh
  • do
  •   $i
  • done
  

$i代表的是/etc/profile.d/color.sh,
/etc/profile.d/alias.sh, /etc/profile.d/default.sh
-------for in 对(命令行,函数)参数遍历-------  


  • test()
  • {
  •         local i
  •         for i in $* ; do
  •              echo "i is $i"
  •         done
  • }
  

$*是字符串:以"参数1 参数2 ... " 形式保存所有参数
$i是变量i的应用表示
[macg@machome ~]$ sh test.sh p1 p2 p3 p4
i is p1
i is p2
i is p3
i is p4
------- for in语句与通配符*合用,批量处理文件-------
    批量改文件名
[root@vm testtip]# ls
aaa.txt  ccc.txt  eee.txt  ggg.txt  hhh.txt  jjj.txt  lll.txt  nnn.txt
bbb.txt  ddd.txt  fff.txt  go.sh    iii.txt  kkk.txt  mmm.txt  ooo.txt
[root@vm testtip]# cat go.sh  


  • for i in *.txt                 *.txt相当于一个字符串数组,依次循环赋值给i
  • do
  • mv "$i" "$i.bak"
  • done
  

[root@vm testtip]# sh go.sh
[root@vm testtip]# ls
aaa.txt.bak  ccc.txt.bak  eee.txt.bak  ggg.txt.bak  hhh.txt.bak  jjj.txt.bak  lll.txt.bak  nnn.txt.bak bbb.txt.bak  ddd.txt.bak  fff.txt.bak  go.sh        iii.txt.bak  kkk.txt.bak  mmm.txt.bak  ooo.txt.bak
-------for in语句与` `和$( )合用,利用` `或$( )的将多行合为一行的缺陷,实际是合为一个字符串数组-------  


  • for i in $(ls *.txt)
  • do
  • echo $i
  • done
  

[macg@machome ~]$ sh test
111-tmp.txt
111.txt
22.txt
33.txt
或者说,利用for in克服` `和$( ) 的多行合为一行的缺陷
-------利用for in 自动对字符串按空格遍历的特性,对多个目录遍历-------  


  • LIST="rootfs usr data data2"

  • for d in $LIST; do
  •   mount /backup/$d
  •   rsync -ax --exclude fstab --delete /$d/ /backup/$d/
  •   umount /backup/$d
  • done
  

********Linux Shell for循环写法总结********  


  • for((i=1;i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552720-1-1.html 上篇帖子: shell-简单总结 下篇帖子: 运维人员如何学好shell脚本编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表