十、Linux入门之Shell进阶

循环循环执行,将某代码段重复运行多次,循环次数可以是已知,也可以是未知,需要有进入条件和退出条件关键词:for, while, untilfor循环格式:for 变量名 in 列表; do循环体; done执行机制:依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束列表生成方式: (1) 直接给出列表 (2) 整数列表: (a) {start..end}...
摘要由CSDN通过智能技术生成

循环

循环执行,将某代码段重复运行多次,循环次数可以是已知,也可以是未知,需要有进入条件和退出条件

关键词:for, while, until

for循环

格式:for 变量名  in 列表; do循环体; done

执行机制:依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

列表生成方式:

        (1) 直接给出列表

        (2) 整数列表:

                (a) {start..end}

                (b) $(seq [start [step]] end)

        (3) 返回列表的命令:$(COMMAND)

        (4) 使用glob,如:*.sh

        (5) 变量引用:$@, $*

示例:

        1、for fn in “*.txt”; do echo $fn; done 与 for fn in *.txt; do echo $fn; done        前一个加括号后搜索到的数据会被当做一个整体输出,而非一个数组形式;后一个的数据则是数组形式

        2、扫描某个网段内存在的主机:

                NETID=192.168.100.123

                for h in {1..255}; do

                {

                         If ping -c1 –w1 $NETID.$h &> /dev/null; then

                                 Echo $NETID.$h is up | tee –a hostlist.txt

                         fi

                }&

        3、类C语言写法

                for((sum=0,i=1;i<=n;++i)); do

                        Let sum+=i

                done

                Echo $sum

for特殊格式

        双小括号方法,即((…))格式,也可以用于算术运算,双小括号方法也可以使bash Shell实现C语言风格的变量操作

                I=10

                ((I++))

        for循环的特殊格式:

                for ((控制变量初始化;条件判断表达式;控制变量的修正表达式)); do

                        循环体

                done

        控制变量初始化:仅在运行到循环代码段时执行一次

        控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断

for循环练习题

        1、判断/var/目录下所有文件的类型

        2、添加10个用户user1-user10,密码为8位随机字符

        3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的输出为文件加stop,以S开头的输出为文件名加start,如K34filename stop S66filename start

        4、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和

        5、计算100以内所有能被3整除的整数之和

        6、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态

        7、打印九九乘法表

        8、在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字母,如:1AbCdeFgH.html

        9、打印等腰三角形

        10、猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃子了。求第一天共摘了多少?

while循环

格式:

        while CONDITION; do

                循环体

        done

        CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环

        因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

进入条件:CONDITION为true

退出条件:CONDITION为false

示例:

         1、监控php-fpm服务是否在运行,如果挂了,则重启

                SleepSec=10

                while 1; do

                        if !killall php-fpm &>/dev/null; then

                                systemctl restart php-fpm &>/dev/null

                                echo “ At `date +‘%F %T’` php-fpm is restarted” >> /var/log/monitor.log

                        fi

                        sleep(SleepSec)

                done

        2、监控磁盘利用率

                df | sed -rn ‘/^\/dev\/sd/s#^([^[:space:]]+).*([[:digit:]]+)% .*$#\1 \2#p’|while read part use; do

                if [ $use –gt 80 ]; then

                        echo $part will be full,use:$use

                fi

                done

While循环练习题:

        1、编写脚本,求100以内所有正奇数之和

        2、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态,并统计在线和离线主机各多少

        3、编写脚本,打印九九乘法表

        4、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大值和最小值

        5、编写脚本,实现打印国际象棋棋盘

        6、后续六个字符串:efbaf275cd、4be9c40b8b、44b2395c46、f8c8873ce0、b902c16c8b、ad865d2f63是通过对随机数变量RANDOM随机执行命令:echo $RANDOM|md5sum|cut –c1-10    后的结果,请破解这些字符串对应的RANDOM值

until循环

格式:

        until CONDITION; do

                循环体

        done

进入条件: CONDITION 为false

退出条件: CONDITION 为true

循环控制语句continue

用于循环体中

continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层

格式:

while CONDTIITON1; do

        CMD1

        ...

        if CONDITION2; then

                continue

        fi

        CMDn

        ...

done

循环控制语句break

用于循环体中

break [N]:提前结束第N层循环,最内层为第1层

格式:

        while CONDTIITON1; do

                CMD1

                ...

                if CONDITION2; then

                        break

                fi

                CMDn

                ...

        done

循环控制shift命令

shift [n],用于将参量列表 list 左移指定次数,缺省为左移一次。

参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍历位置参量列表时,常用到 shift

示例:

        1、脚本:doit.sh

                #!/bin/bash

                while [ $# -gt 0 ]   # or (( $# > 0 )); do

                        echo  $*

                        shift

               done

        2、脚本:shift.sh

                #!/bin/bash

                until [ -z "$1" ]; do

                        echo "$1"

                        shift

                done

                echo

练习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值