Linux操作系统实验六 Shell编程之分支程序编程(上)

简介: Linux操作系统实验六 Shell编程之分支程序编程

1.实验目的与要求

  1. 掌握if多分支语句的使用
  2. 掌握case语句的使用

2.实验平台

实验室安装的实验环境(Linux操作系统)和头歌(www.educoder.net)实验平台(课程实验)

3.实验内容

  1. 巩固Shell特殊字符、变量、输入输出语句
  2. 掌握if多分支语句的使用
  3. 掌握case语句的使用

4.实验详细内容、步骤

任务描述

本关任务: 掌握 if 条件判断语法及其使用方法。

相关知识

if 基本语法
  1. if[条件判断式];then
  2. 程序
  3. fi

或者

  1. if[条件判断式]
  2.  then
  3. 程序
  4. fi

注意事项: (1)[ 条件判断式 ],中括号和条件判断式之间必须有空格; (2)if 后要有空格。

if else 语法
  1. if condition
  2. then
  3.    command1
  4.    command2
  5.    ...
  6.    commandN
  7. else
  8.    command
  9. fi
条件判断运算符

我们在实际过程中,经常会遇到比较两个数值的大小,在数学中我们使用 >号 ,比如 2>1即可比较 2 和 1 的大小,那么在 shell 如何使用判断符号呢? 在 shell 中,我们使用 2 -gt 1来表达数学表达式中的 2>1, 这里 -gt表达的意思类似于数学运算符号中 >号。 shell 的测试符号也可以叫做运算符,分为三种类型:

  • 数值测试;
  • 字符串测试;
  • 文件测试。

【实例1】

  1. num1=100
  2. num2=100
  3. if[ $num1 -eq $num2 ];then
  4.    echo '两个数相等!'
  5. else
  6.    echo '两个数不相等!'
  7. fi

我们用 -eq测试数值是否相等。

【实例2】判断字符串是否相等。

  1. #!/bin/bash
  2. set-x
  3. a=abc
  4. b=cba

  5. if[ ${a}y == ${b}y ]
  6. then
  7.    echo '两个字符串相等!'
  8. else
  9.    echo '两个字符串不相等!'
  10. fi

显而易见输出的结果应该是“两个字符串不相等”,这里用 ==作字符串比较运算。

思考:

  • 为什么这里判断 [ ${a}y == ${b}y ]要加个字符y了呢? 关于这一点之前教程有提过。
  • 这里的set -x 是什么意思,请大家自己翻阅资料查看?

【实例3】判断 /bin 目录下是否存在 bash 文件。

  1. cd /bin
  2. if[-e ./bash ];then
  3.    echo '文件已存在!'
  4. else
  5.    echo '文件不存在!'
  6. fi
if else-if else 语句

在实际生产中,我们可能遇到很多条件判断,这个时候我们就需要用到 if 语句的嵌套及 if else-if else 语法, 其语法格式如下:

  1. if condition1
  2. then
  3.    command1
  4. elif condition2
  5. then
  6.    command2
  7. else
  8.    commandN

【实例4】判断两个变量是否相等:

  1. a=10
  2. b=20
  3. if[ $ay == $by ]
  4. then
  5.   echo "a 等于 b"
  6. elif[ $a -gt $b ]
  7. then
  8.   echo "a 大于 b"
  9. elif[ $a -lt $b ]
  10. then
  11.   echo "a 小于 b"
  12. else
  13.   echo "没有符合的条件"
  14. fi

输出结果:a 小于 b

编程要求

在右侧代码块按照提示,完成 Begin 和end 区间代码,实现 kubernetes 集群弹性伸缩需求,具体内容如下:

  • 判断 kubernetes 集群中当前 pod 的数量是否超过 140 个,如果超过140个,则需要 "自动增加三台集群节点";
  • 如果没有超过 140,但是超过或者等于 90 个 则需要“自动增加一台集群节点”;
  • 如果没有超过 90 个,则说明“不需要增加集群节点” 。

提示:判断一个数大于 5 并且小于 10,我们需要用到复杂运算与运算,在 shell 用 &&符号表示,使用方法参考【实例5】。 【实例5】

  1. if[ $a -gt 5]&&[ $a -lt 10];then
  2.    echo "大于5并且小于10"
  3. fi

  4. &&表示并且
  5. ||表示或者

任务描述

本关任务:带领大家学习 case in 语句的用法,掌握在 case in 语句中使用正则表达式的方法。

相关知识

Shell 支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句。在上一关卡中,我们讲解了 if else 语句的用法,这关我们就来讲解 case in 语句。

case语法
  1. case expression in
  2.    pattern1)
  3.        statement1
  4.        ;;
  5.    pattern2)
  6.        statement2
  7.        ;;
  8.    pattern3)
  9.        statement3
  10.        ;;
  11.    ……
  12.    *)
  13.        statementn
  14. esac

语法说明:

  • case、in 和 esac 都是 Shell 关键字,expression 表示表达式,pattern 表示匹配模式;
  • expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到 expression 的值就可以;
  • pattern 可以是一个数字、一个字符串,甚至是一个简单的正则表达式。
  • case 会将 expression 的值与 pattern1、pattern2、pattern3 逐个进行匹配:
  • 如果 expression 和某个模式(比如 pattern2)匹配成功,就会执行这个模式(比如 pattern2)后面对应的所有语句(该语句可以有一条,也可以有多条),直到遇见双分号;;才停止;然后整个 case 语句就执行完了,程序会跳出整个 case 语句,执行 esac 后面的其它语句。
  • 如果 expression 没有匹配到任何一个模式,那么就执行*) 后面的语句(*表示其它所有值),直到遇见双分号;;或者 esac 才结束。*)相当于多个 if 分支语句中最后的 else 部分。

注意:

  • case in 语句中的 *) 用来“托底”,万一 expression 没有匹配到任何一个模式, *) 部分可以做一些“善后”工作,或者给用户一些提示;
  • 可以没有 *) 部分,如果 expression 没有匹配到任何一个模式,那么就不执行任何操作。

说了这么多,可能有点云里雾里,不如让我来根据【实例1】感受一下什么是case in语句:

【实例1】根据脚本传递的第一个参数,来 echo 对应的结果。

  1. #!/bin/bash
  2. num=$1    # num为脚本的第一个参数
  3. case $num in
  4.    1)
  5.        echo "Monday"
  6.        ;;
  7.    2)
  8.        echo "Tuesday"
  9.        ;;
  10.    3)
  11.        echo "Wednesday"
  12.        ;;
  13.    4)
  14.        echo "Thursday"
  15.        ;;
  16.    5)
  17.        echo "Friday"
  18.        ;;
  19.    6)
  20.        echo "Saturday"
  21.        ;;
  22.    7)
  23.        echo "Sunday"
  24.        ;;
  25.    *)
  26.        echo "error"

输出结果:

  • 当 $1=1 的时候,即匹配到 case 为 1 的条件,这时输出的结果为 Monday;
  • 当 $1=2 的时候,按顺序匹配,先匹配 pattern1 即数值为 1,发现不匹配;继续匹配 pattern 2,发现匹配到 case 为 2 的条件,这时输出的结果为Tuesday;
  • 以此类推,当 $1 为 3,4,5,6,7 的时候,会从上至下顺序匹配,根据匹配的条件执行对应的表达式,即输出对应的值;
  • 当 $1 不为 1 2 3 4 5 6 7 的时候,这时会“兜底”匹配 *),执行“兜底”的语句。
case和正则表达式

case in 的 pattern 部分支持简单的正则表达式,具体来说,可以使用以下几种格式:

说明:

  • 如果不加以说明,Shell 的值都是字符串,expression 和 pattern 也是按照字符串的方式来匹配的;【实例1】看起来是判断数字是否相等,其实是判断字符串是否相等;
  • 最后一个分支*)并不是什么语法规定,它只是一个正则表达式,*表示任意字符串,所以不管 expression 的值是什么,*)总能匹配成功。

【实例2】:本实例演示 case in 语句中如何正则表达式。 已知脚本 a.sh 的内容如下:

  1. #!/bin/bash

  2. name=$1
  3. case $name in

  4.    [a-zA-Z])
  5.        echo "字母"
  6.        ;;
  7.    [0-9])
  8.        echo "数字"
  9.        ;;

  10.    [educoder|github])
  11.        echo "very good!"
  12.        ;;
  13. esac

我们在命令行演示输出结果如下:

  1. [root@pre-host-work02 opt]# bash a.sh github
  2. very good
  3. [root@pre-host-work02 opt]# bash a.sh educoder
  4. very good
  5. [root@pre-host-work02 opt]# bash a.sh 1
  6. 数字
  7. [root@pre-host-work02 opt]# bash a.sh 2
  8. 数字
  9. [root@pre-host-work02 opt]# bash a.sh a
  10. 字母
  11. [root@pre-host-work02 opt]# bash a.sh v
  12. 字母
相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
24天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
54 1
|
16天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
52 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
25天前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
26天前
|
搜索推荐 Linux
深入理解Linux操作系统的启动过程
本文旨在揭示Linux操作系统从开机到完全启动的神秘面纱,通过逐步解析BIOS、引导加载程序、内核初始化等关键步骤,帮助读者建立对Linux启动流程的清晰认识。我们将探讨如何自定义和优化这一过程,以实现更高效、更稳定的系统运行。
|
23天前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
24天前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
111 8
|
1月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
435 6
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
96 3

热门文章

最新文章