广告
返回顶部
首页 > 资讯 > 操作系统 >Shell编程控制结构的基本使用
  • 503
分享到

Shell编程控制结构的基本使用

Shell控制结构 2022-06-04 23:06:43 503人浏览 安东尼
摘要

目录if-then-else分支结构case分支结构for循环结构以常量作为值列表以变量作为值列表以命令运行结果作为值列表expr命令计算器while循环结构until循环结构if-then-else分支结构 if-th

目录
  • if-then-else分支结构
  • case分支结构
  • for循环结构
    • 以常量作为值列表
    • 以变量作为值列表
    • 以命令运行结果作为值列表
  • expr命令计算器
    • while循环结构
      • until循环结构

        if-then-else分支结构

        if-then-else是一种基于条件测试结果的流程控制结构。如果测试结果为真,则执行控制结构中相应的命令列表;否则将进行另外一个条件测试或者退出该控制结构。

        if-then-else语法格式:

        
        if 条件1
         then 命令列表1
        elif 条件2
         then 命令列表2
        else 命令列表3
        fi

        Shell编程控制结构的基本使用

        执行逻辑流程图

        说明:当条件1成立时,则执行命令列表1并退出if-then-else控制结构;如果条件2成立,则执行命令列表2并退出if-then-else控制结构;否则执行命令列表3并退出if-then-else控制结构。在同一个if-then-else结构中只能有一条if语句和一条else语句,eilf语句可以有多条。其中if语句是必须的,elif和else语句是可选的。

        shell脚本首先判断文件test1是否可读,如果是,则输出 is readable !的提示信息;否则不进行任何动作。

        
        [root@localhost 20190105]# vi test.sh 
        filename=test1
        if [ -r $filename ]            //输出test1可读则输出信息
        then
        echo $filename' is readable !'
        fi
        [root@localhost 20190105]# sh test.sh 
        test1 is readable !

        Shell脚本会判断number变量是否等于100,如果是,则输出 The number is equal 100 !的提示;否则输出 The number is not equal 100 !。

        
        [root@localhost 20190105]# vi number.sh
        number=200
        if [ $number -eq 100 ]                 //如果number等于100则输出“The number is equal 100 !”提示
        then
               echo 'The number is equal 100 !'
        else                            //否则输出“The number is not equal 100 !”提示
               echo 'The number is not equal 100 !'
        fi
        [root@localhost 20190105]# sh number.sh 
        The number is not equal 100 !

        Shell脚本首先判断number变量是否小于10,如果是则输出 The number < 10 !;否则,判断number变量是否大于等于10且小于20。如果是则输出 10 =< The number < 20 !;否则,判断 number变量是否大于等于20且小于30。如果是,则输出 20 =< The number < 30 !;否则,输出 30 <= The number !。

        
        [root@localhost 20190105]# vi number1.sh
        number=25
        if [ $number -lt 10 ]              //如果number小于10
        then
               echo 'The number < 10 !'
        elif [ $number -ge 10 -a $number -lt 20 ] //如果number大于等于10且小于20
        then
               echo '10 =< The number < 20 !'
        elif [ $number -ge 20 -a $number -lt 30 ] //如果number大于等于20且小于30
        then
               echo '20 =< The number < 30 !'
        else                         //除上述3种情况以外的其他情况
               echo '30 <= The number !'
        fi
        [root@localhost 20190105]# sh number1.sh 
        20 =< The number < 30 !

        case分支结构

        if-then-else结构能够支持多路的分支(多个elif语句),但如果有多个分支,那么程序就会变得难以阅读。case结构提供了实现多路分支的一种更简洁的方法。

        case语法格式:

        
        case 值或变量 in
        模式1)
         命令列表1
         ;;
        模式2)
         命令列表2
         ;;
        ...
        esac

        case语句后是需要进行测试的值或者变量。Shell会顺序地把需要测试的值或变量与case结构中指定的模式逐一进行比较,当匹配成功时,则执行该模式相应的命令列表并退出case结构(每个命令列表以两个分号“;;”作为结束)。如果没有发现匹配的模式,则会在esac后退出case结构。

        如下该脚本对number变量的值进行测试,与模式匹配的话,则输出相应的信息。

        
        [root@localhost 20190105]# vi case.sh
        number=66
        case $number in
        33) echo 'The number is 33 !'       //number 变量等于 33
        ;;
        44) echo 'The number is 44 !'       //number 变量等于 44
        ;;
        55) echo 'The number is 55 !'       //number 变量等于 55
        ;;
        66) echo 'The number is 66 !'       //number 变量等于 66
        ;;
        77) echo 'The number is 77 !'       //number 变量等于 77
        ;;
        88) echo 'The number is 88 !'       //number 变量等于 88
        ;;
        esac                            //结束 case 结构
        [root@localhost 20190105]# sh case.sh 
        The number is 66 !                   //命令的输出结果

        for循环结构

        for循环结构可以重复执行一个命令列表,基于for语句中所指定的值列表决定是继续循环还是跳出循环。for循环在执行命令列表前会先检查值列表中是否还有未被使用的值,如有的话,则把该值赋给for语句中指定的变量,然后执行循环结构中的命令列表。如此循环,直到值列表中的所有值都被使用。

        for循环结构语法:

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

        以常量作为值列表

        使用变量1、2、3、4、5、6作为值列表,for循环中只是简单的把值列表中的值进行输出。

        
        [root@localhost 20190105]# vi for1.sh
        #!/bin/bash
        for n in 1 2 3 4 5 6      //循环读取 1-6
        do
               echo $n
        done
        由运行结果可以非常清楚的了解for循环的运行过程。
        [root@localhost 20190105]# sh for1.sh
        1
        2
        3
        4
        5
        6

        以变量作为值列表

        值列表可以是一个环境变量。

        
        [root@localhost 20190105]# vi for2.sh
        #!/bin/bash
        values="1 2 3 4 5 6"         //对 values 变量赋值
        for n in $values            //循环读取 values 变量中的值
        do
               echo $n
        done
        [root@localhost 20190105]# sh for2.sh
        1
        2
        3
        4
        5
        6

        以命令运行结果作为值列表

        Shell支持使用命令的运行结果作为for循环的值列表。在Shell中通过"`命令`"或者“$(命令)”来引用命令的运行结果。将会以ls命令的结果作为值列表。

        
        [root@localhost 20190105]# vi for3.sh
        #!/bin/bash
        for n in `ls`         //循环读取 ls 命令的输出结果
        do
               echo $n      //输出变量 n 的值
        done
        [root@localhost 20190105]# sh for3.sh 
        case.sh
        for1.sh
        for2.sh
        for3.sh
        HelloWorld.sh
        number1.sh
        number.sh
        test1
        test2
        test.sh

        expr命令计算器

        expr是一个命令行的计数器,用于加、减、乘、除运算。

        
        [root@localhost 20190105]# expr 123 + 456 - 78  //123 加 456 减 78 等于 501
        501
        [root@localhost 20190105]# expr 9 \* 8       //9 乘以 8 等于 72
        72
        [root@localhost 20190105]# expr 666 / 8      // 666 除以 8 等于 83
        83

        在循环结构中,expr 会被用作增量计算,初始值为10,每次使用expr增加加11/12。注意:这里使用expr命令时都使用的是反撇号,不是单引号。

        
        [root@localhost 20190105]# number=10
        [root@localhost 20190105]# number=`expr $number + 11` //对number变量的值加11
        [root@localhost 20190105]# echo $number
        21
        [root@localhost 20190105]# number=`expr $number + 12` //对number变量的值加12
        [root@localhost 20190105]# echo $number
        33

        while循环结构

        while结构会循环执行一系列的命令,并基于while语句中所指定的测试条件决定是继续循环还是跳出循环。如果条件为真,则while循环会执行结构中的一系列命令。命令执行完毕后,控制返回循环顶部,从头开始重新执行直到测试条件为假。

        while循环结构的语法:

        
        while 条件
        do
         命令1
         命令2
         ...
        done
        

        循环增量计算:是在while循环中使用增量计算,其运行结果如下。

        
        [root@localhost 20190105]# vi while1.sh
        #!/bin/bash
        count=0             //将 count 变量置 0 
        #当 count 变量小于5时继续循环
        while [ $count -lt 5 ]
        do
        #每循环一次,count 变量的值加1
               count=`expr $count + 1`
               echo $count
        done
        [root@localhost 20190105]# sh while1.sh
        1
        2
        3
        4
        5
        [root@localhost 20190105]#

        循环从文件中读取内容

        现有一文件,保存了学生的成绩信息,其中第一列是学生名,第二列是学生的成绩。

        
        [root@localhost 20190105]# vi students.log
        jake 85
        tom  68
        lucy 79
        sam  95

        现在要对以上文件中的学生成绩进行统计,计算学生的数量以及学生的平均成绩。通过 while read 语句读取变量 STUDENT 和 SCORE 的内容,然后在 while 循环中通过 expr 命令计算学生总数和学生总成绩,最后计算平均值并输出。执行该脚本时需要把 students.log 文件的内容重定向到 while2.sh脚本中。

        
        [root@localhost 20190105]# vi while2.sh
        #!/bin/bash
        TOTAL=0            //将变量 TOTAL 置 0
        COUNT=0            //将变量 COUNT 置 0
        #循环读取数据
        while read STUDENT SCORE
        do
        #计算总成绩
               TOTAL=`expr $TOTAL + $SCORE`
        #计算学生数
               COUNT=`expr $COUNT + 1`
        done
        #计算平均成绩
        AVG=`expr $TOTAL / $COUNT`
        echo 'There are '$COUNT' students , the avg score is '$AVG
        [root@localhost 20190105]# sh while2.sh < students.log
        There are 4 students , the avg score is 81
        [root@localhost 20190105]#

        until循环结构

        until是除 for 和 while以外的一种循环结构,它会循环执行一系列命令直到条件为真时停止。

        until循环结构语法:

        
        until 条件
        do
         命令1
         命令2
         ...
        done

        until循环中读取用户输入的内容并显示到屏幕上,当用户输入的内容为 exit 时结束循环。

        
        [root@localhost 20190105]# vi until1.sh
        #!/bin/bash
        xxx=""
        #当 ans 变量的值为 exit 时结束循环
        until [ "$xxx" = exit ]
        do
        #读取用户的输入到ans变量
               read xxx
        #如果用户输入的不是 exit 则输出用户的输入
               if [ "$xxx" != exit ]
               then
                       echo 'The user input is : '$xxx
        #否则退出循环
               else
                       echo 'Exit the script.'
               fi
        done
        [root@localhost 20190105]# sh until1.sh
        hello
        The user input is : hello
        welcome to HongKong!
        The user input is : welcome to HongKong!
        exit
        Exit the script.
        [root@localhost 20190105]#

        到此这篇关于Shell编程控制结构的基本使用的文章就介绍到这了,更多相关Shell 控制结构内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

        --结束END--

        本文标题: Shell编程控制结构的基本使用

        本文链接: https://www.lsjlt.com/news/21398.html(转载时请注明来源链接)

        有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

        本篇文章演示代码以及资料文档资料下载

        下载Word文档到电脑,方便收藏和打印~

        下载Word文档
        猜你喜欢
        • Shell编程控制结构的基本使用
          目录if-then-else分支结构case分支结构for循环结构以常量作为值列表以变量作为值列表以命令运行结果作为值列表expr命令计算器while循环结构until循环结构if-then-else分支结构 if-th...
          99+
          2022-06-04
          Shell控制结构
        • 浅谈shell脚本中的控制流结构
          习惯了c/c++的编程环境,再转到shell编程上,总有那么一点陌生的感觉。 shell中一般的if-then-else函数格式无外乎如下: if 条件1 then 命令1 elif 条件2 then命令2 ...
          99+
          2022-06-04
          shell脚本控制流结构 浅谈shell脚本中的控制流结构
        • shell脚本中的控制流结构是什么
          shell脚本中的控制流结构是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。shell中一般的if-then-else函数格式无外乎如下:if 条件1then...
          99+
          2023-06-09
        • C#控制台应用程序的基本结构是怎样的
          这篇文章主要讲解了“C#控制台应用程序的基本结构是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#控制台应用程序的基本结构是怎样的”吧!下面看看C#控制台应用程序示例(Console...
          99+
          2023-06-17
        • Shell脚本编程:构筑程序基石的基本元素有哪些
          这篇文章主要介绍“Shell脚本编程:构筑程序基石的基本元素有哪些”,在日常操作中,相信很多人在Shell脚本编程:构筑程序基石的基本元素有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
          99+
          2022-10-19
        • Shell AWK编程的基本介绍和使用详解
          目录1、AWK介绍(1)AWK概述(2)printf格式化输出(3)printf命令说明2、AWK的基本使用(1)AWK命令说明(2)AWK命令使用1、AWK介绍 (1)AWK概述 AWK是一种处理文本文件的语言,是一个...
          99+
          2022-06-08
          Shell AWK使用 Shell AWK基本介绍
        • Go结构体的基本使用详解
          目录定义实例化匿名结构体空结构体构造函数方法与接收者匿名字段实现面向对象的“继承”特性标签tag结构体与JSON系列化本文主要介绍Go的结构体类型的基本使用,...
          99+
          2023-02-16
          Go结构体 Go结构体使用
        • Java基础之三大控制流程结构的示例分析
          这篇文章给大家分享的是有关Java基础之三大控制流程结构的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现...
          99+
          2023-06-14
        • shell脚本编程Makefile的使用
          目录为什么要使用MakefileMakefile的编写Make工作原理Makefile的规则为什么要使用Makefile 简单来说,当我们写一个稍微大一些项目的时候,如果我们要执行一个程序那得编译很多个文件并且还得链接起...
          99+
          2022-06-05
          shell Makefile
        • shell脚本中case条件控制语句的使用
          本篇内容介绍了“shell脚本中case条件控制语句的使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在shell脚本中,发现case语句...
          99+
          2023-06-09
        • shell流程控制语句的具体使用
          目录前言一、if - else 语句案例需求描述二、case语句三、while 语句四、until语句五、for语句for 语法写法一for 语法写法二for 语法写法三无...
          99+
          2023-05-19
          shell 流程控制语句
        • shell 流程控制语句的具体使用
          目录前言一、if - else 语句案例需求描述二、case语句三、while 语句四、until语句五、for语句for 语法写法一for 语法写法二for 语法写法三无限for循环六、select 语句八、...
          99+
          2023-05-12
          shell 流程控制语句
        • python元类编程的基本使用
          目录1.1.propety动态属性1.2.__getattr__和__getattribute__的区别1.3.属性描述符1.4.__new__和__init__的区别1.5.自定义...
          99+
          2023-02-22
          python元类编程 python元类
        • Golang三个编译基本命令的使用小结
          目录1、go build(编译)2、go run(编译并运行)3、go install(编译并安装)在运行Go语言程序之前,先要将其编译成二进制的可执行文件 我们通常在编辑器编写完源...
          99+
          2023-05-14
          Golang 编译命令 Golang 编译
        • Linux下使用Shell脚本实现进程监控的流程
          本文介绍一种在Linux系统下为实现某些关键进程状态的实时监控而使用shell脚本的编写方法。在这里主要通过监控某些进程是否退出作为判断依据,如果某个进程退出了,则进行对应的恢复处理...
          99+
          2023-02-27
          Shell脚本进程监控 Linux使用Shell脚本进程监控
        • 如何编写Shell脚本使Nagios插件监控程序资源占用
          本篇内容主要讲解“如何编写Shell脚本使Nagios插件监控程序资源占用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写Shell脚本使Nagios插件监控程序资源占用”吧!一、shel...
          99+
          2023-06-09
        • shell脚本编程if语句的使用方法
          本篇内容主要讲解“shell脚本编程if语句的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“shell脚本编程if语句的使用方法”吧!我不是研究linux下的东西的,所以这里只对shel...
          99+
          2023-06-09
        • linux中如何使用shell的awk流程控制语句
          小编给大家分享一下linux中如何使用shell的awk流程控制语句,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.条件判断语句(if)代码如下:if(表达式)...
          99+
          2023-06-13
        • Linux下如何使用Shell脚本实现进程监控的流程
          这篇“Linux下如何使用Shell脚本实现进程监控的流程”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux下如何使用...
          99+
          2023-07-05
        • Git版本控制与Linux应用程序打包的完美结合
          在开发Linux应用程序的过程中,版本控制是一个非常重要的环节。Git作为目前最流行的版本控制工具之一,已经被广泛应用于开发领域。与此同时,打包是将应用程序部署到生产环境中的关键步骤。本文将介绍如何将Git版本控制与Linux应用程序打包...
          99+
          2023-10-13
          linux git 打包
        软考高级职称资格查询
        编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
        • 官方手机版

        • 微信公众号

        • 商务合作