• LinuxShell脚本——循环结构


    LinuxShell脚本——循环结构

    摘要:本文主要学习了Shell脚本中的循环结构。

    while循环

    基本语法

    while循环是最简单的一种循环,如果条件满足则执行循环里的语句,如果条件不满足则退出循环:

    1 while 条件
    2 do
    3     命令
    4 done

    注意,在循环体命令中必须有相应的语句使得条件“不成立”,只有这样才能最终退出循环,否则就成了死循环,一直执行下去,永无休止。

    使用举例

    打印0到100的累加后得到的值:

    1 #!/bin/bash
    2 i=0
    3 sum=0
    4 while (( i <= 100 ))
    5 do
    6     (( sum += i ))
    7     (( i++ ))
    8 done
    9 echo ${sum}

    until循环

    基本语法

    unti循环和while循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环:

    1 until 条件
    2 do
    3     命令
    4 done

    使用举例

    打印0到100的累加后得到的值:

    1 #!/bin/bash
    2 i=100
    3 sum=0
    4 until (( i <= 0 ))
    5 do
    6     (( sum += i))
    7     (( i-- ))
    8 done
    9 echo ${sum}

    for循环

    基本语法

    1 for ((初始化表达式; 判断表达式; 修改变量表达式))
    2 do
    3     命令
    4 done

    初始化表达式只会在循环执行前执行一遍,判断表达式每次都会进行判断,修改变量表达式会修改影响了判断表达式的。

    使用举例

    1 #!/bin/bash
    2 sum=0;
    3 for (( i=0; i <= 100; i++ ))
    4 do
    5     (( sum += i))
    6 done
    7 echo ${sum}

    for-in循环

    基本语法

    1 for 变量名 in 取值列表
    2 do
    3     命令
    4 done

    取值列表

    取值列表的形式有多种,你可以直接给出具体的值,也可以给出一个范围,还可以使用命令产生的结果,甚至使用通配符。

    1)直接给出具体的值

    可以在in关键字后面直接给出具体的值,多个值之间以空格分隔。比如1 2 3 4 5、"abc" "390" "tom"等。

    2)给出一个取值范围

    取值范围的具体格式为 {start..end} 。比如 {1..100} 。

    3)使用命令的执行结果

    使用反引号`命令`或者$(命令)获取到值,然后可以取得命令的执行结果作为取值列表。比如 $(ls *.sh) 。

    4)使用Shell通配符

    Shell通配符可以认为是一种精简化的正则表达式,通常用来匹配目录或者文件,而不是文本。比如 *.sh 。

    5)使用特殊变量

    Shell中有多个特殊的变量,在取值列表中可以使用。比如$#、$*、$@、$?、$$。

    使用举例

    使用具体的值:

    1 #!/bin/bash
    2 sum=0;
    3 for n in 1 2 3
    4 do
    5     (( sum += n ))
    6 done
    7 echo ${sum}

    使用取值范围:

    1 #!/bin/bash
    2 for c in {a..z}
    3 do
    4     echo $c
    5 done

    使用在调用Shell脚本时传入的值,可以省略 in 取值列表 部分:

    1 #!/bin/bash
    2 for c
    3 do
    4     echo $c
    5 done

    select-in循环

    基本语法

    select-in循环用来增强交互性,它可以显示出带编号的菜单,用户输入不同的编号就可以选择不同的菜单,并执行不同的功能。

    select-in是Shell独有的一种循环,非常适合终端(Terminal)这样的交互场景,C语言、C++、Java、Python、C#等其它编程语言中是没有的。

    1 select 变量名 in 取值列表
    2 do
    3     命令
    4 done

    使用举例

    编写Shell:

    1 #!/bin/bash
    2 echo "What's Your Gender?"
    3 select name in "Mem" "Women"
    4 do
    5     echo "Choose $name"
    6 done
    7 echo "End Shell"

    执行Shell并退出:

     1 [root@localhost ~]# sh test.sh
     2 What's Your Gender?
     3 1) Mem
     4 2) Women
     5 #? 1
     6 Choose Mem
     7 #? 2
     8 Choose Women
     9 #? 1
    10 Choose Mem
    11 #? 
    12 End Shell
    13 [root@localhost ~]# 

    说明:

    使用 #? 用来提示用户输入菜单编号。按下Ctrl+D组合键结束select-in循环。

    运行到select语句后,取值列表中的内容会以菜单的形式显示出来,用户输入菜单编号,就表示选中了某个值,这个值就会赋给变量,然后再执行循环体中的命令部分。

    每次循环时select都会要求用户输入菜单编号,并使用环境变量PS3的值作为提示符,PS3的默认值为 #? ,修改PS3的值就可以修改提示符。

    如果用户输入的菜单编号不在范围之内,那么就会给变量赋一个空值,如果用户输入一个空值(什么也不输入,直接回车),会重新显示一遍菜单。

    注意,select是无限循环(死循环),输入空值,或者输入的值无效,都不会结束循环,只有遇到break语句,或者按下Ctrl+D组合键才能结束循环。

  • 相关阅读:
    位运算
    (二)给Centos配置网络以及使用xshell远程连接Centos
    (一)安装Linux时的磁盘划分
    (五)多点触控之兼容ViewPager
    (四)双击放大与缩小图片
    (三)多点触控之自由移动缩放后的图片
    (二)弥补图片自由缩放出现的间隙
    (一)自定义ImageView,初步实现多点触控、自由缩放
    (四)实现菜单点击弹出提示框
    (三)实现菜单点击动画
  • 原文地址:https://www.cnblogs.com/shamao/p/11241778.html
Copyright © 2020-2023  润新知