for、while循环、break跳出循环、continue结束本次循环、exit退出脚本

for 循环

  • 当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。

  • 语法:for 变量名 in 条件; do...;done
  • 案例1

    #!/bin/bash
    sum=0 // 给变量sum赋值
    for i in seq 1 100 // 给i赋值,从1到100
    do
    sum=$[ $sum + $i ]
    // 累加
    done
    echo $sum
    // 输出结果为1到100的和

  • 案例2

    #!/bin/bash
    cd /etc/ // 切换到/etc/目录下
    for a in ls /etc/
    do
    if [ -d $a ] // 判断是否为目录文件
    then
    echo $a
    ls $a
    fi
    done
    // 文件列表循环

  • for默认情况下把空格或者换行符(回车)作为分隔符

    [[email protected] test]# ls
    1 2 3 4.txt
    // 3 4.txt是一个文件(34之间有空格)
    [[email protected] test]# for i in ls ./; do echo $i ; done
    1
    2
    3
    4.txt

while 循环

  • while 循环用于不断的执行一系列的命令,也用于从文件中读取数据,命令通常为测试条件。
  • 语法:while条件;do...;done
  • 案例1 (监控脚本)

    当系统负载大于10的时候,发送邮件,每隔30秒执行一次

    #!/bin/bash
    while :
    do
    load=w | head -1 | awk -F ‘load average: ‘ ‘{print $2}‘ | cut -d. -f1
    // w 命令查看负载
    // head -1 只查看第一行
    // awk -F ‘load average: ‘指定分隔符
    // {print $2} 打印第二段
    // cut -d. -f1 以点为分隔符,截取第一段
    if [ $load -gt 10 ]
    // 当$load 大于10 时执行下面命令
    then
    /usr/local/sbin/mail.py [email protected] "load high" "$load"
    // 监控邮箱脚本所在路径
    // 接收邮件的用户、主题、内容
    fi
    sleep 30
    // 每30秒查一次
    done
    // while 后的“:”表示死循环,也可以将:换成true

    执行结果:
    [[email protected] shell]# sh -x while.sh

    • :
      ++ w
      ++ head -1
      ++ awk -F ‘load average: ‘ ‘{print $2}‘
      ++ cut -d. -f1
    • load=0
    • ‘[‘ 0 -gt 10 ‘]‘
    • sleep 30

    // 如果不手动停止该脚本,它会一直循环执行(按ctrl+c结束),实际环境中配合screen(虚拟终端)中使用。

  • 案例2

    交互模式下,用户输入一个字符,检测该字符是否符合条件,如:空、非数字、数字。分别对字符做出判断,然后做出不同的回应。

    #!/bin/bash
    while :
    do
    read -p "please input a number:" n
    if [ -z "$n" ]
    // 如果$n为空,则执行then
    then
    echo "你需要输入东西"
    continue
    // 执行到这里时,返回脚本开头重新开始执行
    fi
    n1=echo $n | sed ‘s/[0-9]//g‘
    if [ ! -z "$n1" ]
    // 如果$n不为空,则执行then
    then
    echo "你只能输入一个纯数字"
    continue
    // 执行到这里时,返回到脚本开头重新执行
    fi
    break
    // 如果上面两个条件都没满足,则跳出循环
    done
    echo $n

    执行结果:
    [[email protected] shell]# sh while2.sh
    please input a number:
    你需要输入东西
    please input a number:a
    你只能输入一个纯数字
    please input a number:1
    1

break 跳出循环

  • break 命令允许跳出所有循环(终止执行后面所有循环)。

    #!/bin/bash
    for i in seq 1 5
    do
    echo $i // 输出$i的值
    if [ $i -eq 3 ]
    then
    break
    // 当$i等于3时跳出循环
    fi
    echo $i
    // 没跳出循环就在输出一次$i
    done
    echo "break!"
    // 跳出循环后输出break!

    执行结果:
    [[email protected] shell]# sh break.sh
    1
    1
    2
    2
    3
    break!

continue 结束本次循环

  • continue 命令与break相似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。(忽略掉continue之下的代码,返回脚本开头继续执行)

    #!/bin/bash
    for i in seq 1 5
    do
    echo $i
    if [ $i -eq 3 ]
    then
    continue // 跳出循环
    fi
    echo $i
    done
    echo "break!"

    执行结果:
    [[email protected] shell]# sh continue.sh
    1
    1
    2
    2
    3
    4
    4
    5
    5
    break!
    // 执行到3时,脚本没有结束,又继续执行,所以只有一个3

exit 退出脚本

  • 执行到exit时,直接退出脚本。比break还严谨,break只是跳出循环,但还能执行循环外的命令,但exit不行

    #!/bin/bash
    for i in seq 1 5
    do
    echo $i
    if [ $i -eq 3 ]
    then
    exit // 退出脚本
    fi
    echo $i
    done
    echo "break!"

    执行结果:
    [[email protected] shell]# sh exit.sh
    1
    1
    2
    2
    3
    // 执行到3直接退出,最后循环外的break都没有

select用法

  • select 也是循环的一种,它比较适合用在用户选择的情况下。比如,我们有一个这样的需求,运行脚本后,让用户去选择数字,选择1运行w命令,选择2运行top命令,选择3运行free命令,选择4退出。

    #!/bin/bash
    echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit"
    echo
    select command in w top free quit
    do
    case $command in
    w)
    w
    ;;
    top)
    top
    ;;
    free)
    free
    ;;
    quit)
    exit
    ;;
    *)
    echo "Please input a number:(1-4)."
    ;;
    esac
    done

    执行结果:
    sh select.sh
    Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit

    1) w
    2) top
    3) free
    4) quit
    #? 1
    16:06:58 up 109 days, 22:01, 1 user, load average: 0.11, 0.05, 0.01
    USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
    root pts/0 222.128.156.84 16:05 0.00s 0.00s 0.00s w

    #? 3
    total used free shared buffers cached
    Mem: 1020328 943736 76592 0 86840 263624
    -/+ buffers/cache: 593272 427056
    Swap: 2097144 44196 2052948
    #?

  • 我们发现,select会默认把序号对应的命令列出来,每次输入一个数字,则会执行相应的命令,命令执行完后并不会退出脚本。它还会继续让我们再次输如序号。序号前面的提示符,我们也是可以修改的,利用变量PS3即可,再次修改脚本如下:

    #!/bin/bash
    PS3="Please select a number: "
    echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit"
    echo

    select command in w top free quit
    do
    case $command in
    w)
    w
    ;;
    top)
    top
    ;;
    free)
    free
    ;;
    quit)
    exit
    ;;
    *)
    echo "Please input a number:(1-4)."
    esac
    done

  • 如果想要脚本每次输入一个序号后就自动退出,则需要再次更改脚本如下:

    #!/bin/bash
    PS3="Please select a number: "
    echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit"
    echo

    select command in w top free quit
    do
    case $command in
    w)
    w;exit
    ;;
    top)
    top;exit
    ;;
    free)
    free;exit
    ;;
    quit)
    exit
    ;;
    *)
    echo "Please input a number:(1-4).";exit
    esac
    done

原文地址:http://blog.51cto.com/754599082/2070306

时间: 2024-10-05 15:29:37

for、while循环、break跳出循环、continue结束本次循环、exit退出脚本的相关文章

for循环while循环break跳出循环continue结束本次循环exit退出脚本

20.10 for循环1到100相加的值执行结果 打印出1-100的数字 if [ -d $a ]thenls -d $afi它相当于 [ -d $a ] && ls $a 上图创建的3空格4.txt是一个文件,查在for语句循环的时候将它拆分成3与4.txt两个文件了,说明for循环是以空格作为分隔符的,这个问题要注意20.11 20.12 while循环需求每隔半分钟检查一下系统的负载,当负载大于10的时候就发一封邮件,隔30 秒执行一次这是一个死循环脚本30秒执行一次这个脚本是让用户

for循环 while循环 break跳出循环 continue结束本次循环 exit退出整

一.for循环需求:计算1-100所有数字的和[[email protected] shell]# vi for1.sh#!/bin/bashfor i in seq 1 100doecho $i //先把100个数字打印出来done[[email protected] shell]# sh for1.sh //执行脚本打印出100个数字 继续修改脚本:[[email protected] shell]# vi for1.sh#!/bin/bashsum=0for i in seq 1 100d

for循环 while循环 break跳出循环 continue结束本次循环 exit退出整个脚本

原文地址:https://www.cnblogs.com/xiaobo-Linux/p/8920368.html

for与while循环、break跳出循环、continue结束本次循环、exit退出脚本

for循环 while循环 break跳出循环 continue结束本次循环 exit退出脚本 原文地址:http://blog.51cto.com/13515599/2106958

shell脚本 for循环、break跳出循环、continue结束本次循环

20.10 for循环 语法:for 变量名 in 条件; do ...; done ;案例1 [[email protected] shell]# cat for.sh #!/bin/bash sum=0 for i in `seq 1 100` do sum=$[$sum+$i] done echo $sum #输出的结果 [[email protected] shell]# sh for.sh 5050 文件列表循环 [[email protected] shell]# cat for2.

Shell脚本(for循环,while循环,break跳出循环,continue结束本次循环)

for循环 语法:for 变量名 in 条件 : do done: 案例一: 计算1-100所有数字的和. 脚本: #!/bin/bash sum=0 for i in `seq 1 100` do sum=$[$sum+$i] done echo $sum 结果: [[email protected] ~]# sh 1-100.sh 5050 案例二: 列出/etc/sysconfig下所有子目录,并且使用ls -d命令查看. 脚本: #/bin/bash cd /etc/sysconfig

六十九、for循环、while循环、break跳出循环、continue结束本次循环、exit退出整

六十九.for循环.while循环.break跳出循环.continue结束本次循环.exit退出整个脚本 一.for循环 语法:for 变量名 in 条件; do -; done 案例1 # vim for1.sh #!/bin/bash sum=0 for i in `seq 1 100` do sum=$[$sum+$i]     //核心语句 echo $i done echo $sum //最后再echo $sum,不能在for循环里echo,不然每次的sum都打印出来了.让它每次都打

20.10 for循环 20.11/20.12 while循环 20.13 break跳出循环 20.14 continue结束本次循环 20.15 exit退出整个脚本

20.10 for循环 ?语法:for 变量名 in 条件; do -; done ? 案例1 1+2+3..+100的和 #!/bin/bash sum=0 for i in `seq 1 100` // seq 1到100个数字 do sum=$[$sum+$i] echo $i done echo $sum sum 第一次作为变量的时候,是0:当进入for循环里面的时候,每运算一次,sum变量就会改变一次,直至$i 结束:最后输出结果 $sum ? 案例2 文件列表循环 #!/bin/ba

for循环,while循环,break跳出循环,continue结束本次循环,exit直接退出脚本

for循环 语法:for 变量名 in 条件; do -; done 案列1,算出1到10的数字相加等于多少并打印出过程 [[email protected] shell]# cat for1.sh #!/bin/bash sum=0 for i in `seq 1 10` do sum=$[$sum+$i] echo "$sum + $i" done echo $sum [[email protected] shell]# sh -x for1.sh + sum=0 ++ seq 1