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

[经验分享] 脚本入门之for循环

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-8 16:53:28 | 显示全部楼层 |阅读模式
面向过程的编译语句,语言控制结构:

顺序执行:默认法则,逐条执行各语句

选择执行:条件判断,只有部分是符合条件,只执行符合条件的部分

布尔测试:真,假(0:真;1-255:假);

循环执行:将同一段代码反复执行n次;循环必须要有退出条件,否则就成为了死循环。

控制语句:

     bash循环控制语句:

              for

              while

              until

bash的for循环:

      事先提供一个元素列表,而后,使用变量去遍历此元素列表;每访问一个元素,就会执行一次循环体;直到元素遍历完毕

用法格式:

        for VAR_NAME in 元素(列表)1 元素(列表)2…

        do

语句1

语句2

           …

        done

注:for和do可以写在同一行中但必须用分号隔开

对于这些知识的运用只能在练习中不断练习才能达到牢固掌握。

练习1:写一个脚本

      使用for循环创建目录/tmp/1.dir,/tmp/2.dir和/tmp/3.dir,并将它们的权限均修改为750;

#!/bin/bash

for DirName in/tmp/1.dir /tmp/2.dir /tmp/3.dir; do

mkdir $DirName

chmod 750 $DirName

done

ls –l /tmp 验证一下


练习2:写一个脚本

使用for循环修改目录/tmp/1.dir,/tmp/2.dir和/tmp/3.dir的最近一次修改时间为2010年3月3号3点3分3秒;

#!/bin/bash

for Dir in/tmp/1.dir /tmp/2.dir /tmp/3.dir

do

touch -mt201003030303.03 $Dir

done

stat/tmp/1.dir 查看结果

或:#!/bin/bash

for Dir in/tmp/1.dir /tmp/2.dir /tmp/3.dir

do

stat $Dir

touch -mt201003030303.03 $Dir

stat $Dir

done

练习3:写一个脚本

使用for循环统计/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#开头的行的行数;

        #!/bin/bash

for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab

do

grep '^#.*' $ File| wc -l

done

人性化写法:

#!/bin/bash

for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab ; do

    LINES=`grep '^#' $File | wc -l`

    echo "$File:$LINES"

done

#!/bin/bash

for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab; do

    LINES=$(grep '^#' $File | wc -l)

    echo "$File:$LINES"

done

练习4:写一个脚本

使用for循环统计/etc/fstab、/etc/rc.d/rc.sysinit、/etc/inittab文件中各自以#开头的行的行数和空白行数;

#!/bin/bash

for File in/etc/fstab /etc/rc.d/rc.sysinit /etc/inittab;do

echo "$File:"

echo "lines:`grep "^#" $File |wc -l`"

echo "space lines:`grep "^$"$File | wc -l`"

done

练习5:写一个脚本

使用for循环,复制/etc/fstab、/etc/inittab和/etc/rc.d/init.d/functions文件至/tmp/目录中,并重命名为原有的名称之后加当前日期,如第一个文件为/tmp/fstab-2013-07-15;

#!/bin/bash

for File in/etc/fstab /etc/inittab /etc/rc.d/init.d/functions; do

cp $File /tmp/$File-`date +%F`

done

练习6:写一个脚本

     显示/etc/passwd文件中第1、3、6、12个用户的用户名、ID和shell;

#! /bin/bash

for Line in 1 3 6 12;do

UserName=`head -$Line /etc/passwd | tail -1 | cut -d: -f1`

        Uid=`head-$Line /etc/passwd | tail -1 | cut -d: -f3`

        Shell=`head-$Line /etc/passwd | tail -1 | cut -d: -f7`

        echo"User: $UserName, UID is $Uid, Shell: $shell"

done

练习7:写一个脚本

     显示/etc/passwd文件中第1、3、6、12个用户的用户名、ID和基本组的组名;

#!/bin/bash

for Line in 1 3 6 12; do

UserName=`head -$Line /etc/passwd | tail -1 | cut -d: -f1`

Uid=`head -$Line /etc/passwd | tail -1 | cut -d: -f3`

GroupName=`id -gn $UserName`

echo "$UserName, $Uid, $GroupName"

done

列表的生成方式:

1:逐个给出,如:/etc/inittab/etc/fstab;

2:使用通配符来实现文件通配,例:for File in /var/*;

3:使用命令生成列表,详见下例(生成的一般为相对路径)

            #!/bin/bash

for File in `ls /var`;do

                  file /var/$file

done

4:生成数字序列;

    {}:{起始数字..结束数字},例如{1..100}表示从1到100之间的所有正整数

      `seq [起始数字] [步长] [结束数字]`,例:seq 1 2100 表示从1到100之间以2个单位输出

练习8: 写一个脚本

使用for循环取出每个用户用户名和Shell;

#!/bin/bash

LINES=`wc -l/etc/passwd | cut -d' ' -f1`

for I in `seq 1$LINES`; do

head -$I /etc/passwd | tail -1 | cut -d:-f1,7

done


运维网声明 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-254818-1-1.html 上篇帖子: linux下如何解压和压缩文件 下篇帖子: rsync错误报告
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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