shell:使用结构化语句(控制流)

news2024/11/15 11:44:11

许多程序要求对shell脚本中的命令施加一些逻辑流程控制。有一类命令会根据条件使脚本跳
过某些命令。这样的命令通常称为结构化命令(structured command)。

1. if-then、if-then-else、if-then-elif-else

如果该命令的退出状态码是0 (该命令成功运行),位于then部分的命令就会被执行。

1.1 if-then

格式:

# 1. 基础格式
if command 
then
	commands
fi

# 2. 基础格式2
if command; then
	commands
fi

1.2 if-then-else

if-then-else语句在语句中提供了另外一组命令。

if command; then
	commands
else
	commands
fi

1.3 嵌套if

if command1; then
	commands 
elif command2; then
	more commands 
fi

1.4 if-then-elif-else

if command1; then
	commands 
elif command2; then
	commands
else
	commands
fi

2. test命令

test命令提供了在if-then语句中测试不同条件的途径。如果test命令中列出的条件成立,
test命令就会退出并返回退出状态码0。

test命令的格式非常简单。

test condition

condition是test命令要测试的一系列参数和值。当用在if-then语句中时,test命令看 起来是这样的。

if test condition;then
commands
fi

样例:

#!/bin/bash
# Testing the test command #
my_variable="Full"
#
if test $my_variable
then
   echo "The $my_variable expression returns a True"
#
else
   echo "The $my_variable expression returns a False"
fi

变量my_variable中包含有内容(Full),因此当test命令测试条件时,返回的退出状态 为0。这使得then语句块中的语句得以执行。

3. test优化写法

bash shell提供了另一种条件测试方法,无需在if-then语句中声明test命令。

if [ condition ] then
commands
fi

方括号定义了测试条件。注意,第一个方括号之后和第二个方括号之前必须加上一个空格
否则就会报错。

test命令可以判断三类条件:

  • 数值比较
  • 字符串比较
  • 文件比较

3.1 数值比较

在这里插入图片描述

3.2 字符串比较

在这里插入图片描述
用例:

$ cat test10.sh #!/bin/bash
# testing string length val1=testing
val2=''
#
if [ -n $val1 ]
then
       echo "The string '$val1' is not empty"
    else
       echo "The string '$val1' is empty"
    fi
    #
    if [ -z $val2 ]
    then
       echo "The string '$val2' is empty"
    else
       echo "The string '$val2' is not empty"
    fi
    #
    if [ -z $val3 ]
    then
       echo "The string '$val3' is empty"
    else
       echo "The string '$val3' is not empty"
fi
$
$ ./test10.sh
The string 'testing' is not empty The string '' is empty
The string '' is empty
$

3.3 文件比较

在这里插入图片描述

4. 复合条件

if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用:

 [ condition1 ] && [ condition2 ]
 [ condition1 ] || [ condition2 ]

第一种布尔运算使用AND布尔运算符来组合两个条件。要让then部分的命令执行,两个条件都必须满足。

第二种布尔运算使用OR布尔运算符来组合两个条件。如果任意条件为TRUE,then部分的命 令就会执行。

5. if-then的高级特性

bash shell提供了两项可在if-then语句中使用的高级特性:

  • 用于数学表达式的双括号
  • 用于高级字符串处理功能的双方括号

5.1 使用双括号

双括号命令允许你在比较过程中使用高级数学表达式。双括号命令的格式如下:

(( expression ))

在这里插入图片描述

5.2 使用双方括号

双方括号命令提供了针对字符串比较的高级特性。双方括号命令的格式如下:

[[ expression ]]

双方括号里的expression使用了test命令中采用的标准字符串比较。但它提供了test命
令未提供的另一个特性——模式匹配(pattern matching)。

用例:

$ cat test24.sh
#!/bin/bash
# using pattern matching #4 if [[ $USER == r* ]]
then
echo "Hello $USER"
else 5
       echo "Sorry, I do not know you"
    fi
$ ./test24.sh 6 Hello rich
$

6. case命令

case命令会采用列表格式来检查单个变量的多个值。

case variable in
pattern1 | pattern2) commands1;; 
pattern3) commands2;;
*) default commands;;
esac

case命令会将指定的变量与不同模式进行比较。如果变量和模式是匹配的,那么shell会执行 为该模式指定的命令。可以通过竖线操作符在一行中分隔出多个模式模式。星号会捕获所有与已 知模式不匹配的值。

这里有个将if-then-else程序转换成用case命令的例子。

$ cat test26.sh #!/bin/bash
# using the case command #
case $USER in
rich | barbara)
       echo "Welcome, $USER"
       echo "Please enjoy your visit";;
    testing)
      echo "Special testing account";;
    jessica)
       echo "Do not forget to log off when you're done";;
    *)
       echo "Sorry, you are not allowed here";;
    esac
$
$ ./test26.sh
Welcome, rich
Please enjoy your visit 
$

case命令提供了一个更清晰的方法来为变量每个可能的值指定不同的选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI突然宣布停止向中国提供API服务!

标题 🌟 OpenAI突然宣布停止向中国提供API服务! 🌟摘要 📜引言 📢正文 📝1. OpenAI API的重要性2. 停止服务的原因分析3. 对中国市场的影响4. 应对措施代码案例 📂常见问题解答(QA)❓…

SNP过滤标准的确定

--------各项指标的计算-------- vcfxxx.vcf.gz outxxx # 计算完的文件会自动生成文件后缀 # 1.计算每个个体的SNP的平均测序深度 vcftools --gzvcf $vcf --depth --out $out # 2.计算每个SNP位点的测序深度 vcftools --gzvcf $vcf --site-mean-depth --out $out # 3.计算每…

3D网格细分与变形

这篇文章探讨了整个细分和变形过程中出现的各种问题的解决方案。然后,它将其扩展为完整的管道,用于变形和操纵 3D 网格,并计算着色和位移的精确法线。 1、简单细分 在 3D 渲染中,所有网格都由三角形组成。当模型从 Blender 或任…

关于window的安装

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 第一windows的分类 旗舰版 个人版…

赶快收藏!全网最佳 WebSocket 封装:完美支持断网重连、自动心跳!

文章目录 一、WebSocket 基础WebSocket 的基本使用 二、封装 WebSocket 客户端WebSocketClient 类使用 WebSocketClient 类解释代码实现 三、总结优点未来改进 🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&#xff…

找不到mfc140u.dll怎么修复,mfc140u.dll丢失的多种修复方法

计算机丢失mfc140u.dll文件会导致依赖该文件的软件无法正常运行。mfc140u.dll是Microsoft Visual C 2015的可再发行组件之一,它属于Microsoft Foundation Class (MFC) 库,许多使用MFC开发的程序需要这个DLL文件来正确执行。丢失了mfc140u.dll文件。会导致…

论文阅读--《FourierGNN:从纯图的角度重新思考多元时间序列预测》

Yi K, Zhang Q, Fan W, et al. FourierGNN: Rethinking multivariate time series forecasting from a pure graph perspective[J]. Advances in Neural Information Processing Systems, 2024, 36. 本次介绍的文章来自NeurIPS 2023,关于多变量时间序列的预测 摘要…

以创新赋能引领鸿蒙应用开发,凡泰极客亮相华为HDC2024

6月21日至23日,华为开发者大会2024在松山湖举行。大会现场,华为发布了HarmonyOS、盘古大模型等方面最新进展。国内外众多企业齐聚一堂,共迎新商机、共创新技术、共享新体验。 凡泰极客作为鸿蒙生态的重要战略合作伙伴,同时也是鸿…

【 IM 服务】开通全量消息路由服务

前提条件 在生产环境中,仅 IM 旗舰版、IM 尊享版可开通该服务。 操作说明 控制台 - 应用配置 - IM 服务管理 页面开通 可自助配置(配置名:多设备消息同步)收费配置(开发环境下免费) image1575645 48.4 K…

安达发|生产计划排产软件推动制造业的高质量发展

在全球经济一体化的大背景下,制造业正面临着前所未有的挑战与机遇。随着智能化技术的不断进步,生产计划排产软件作为推动制造业高质量发展的重要工具,已经成为行业转型升级的关键。 制造业作为国民经济的重要支柱,其发展水平直接关…

2024年全国VUE考试中心大全!

大家好,华为HCIA、HCIP、HCIE的笔试部分,都需要在VUE考试中心进行预约。但是很多同学都不知道当地VUE考试中心在哪里! 为了解决大家的问题,这边整理了全国各大城市的VUE考试中心名称和详细地址。需要的小伙伴们可以来看看&#x…

项目实训-vue(十一)

项目实训-vue&#xff08;十一&#xff09; 文章目录 项目实训-vue&#xff08;十一&#xff09;1.概述2.页顶导航栏3.导航信息4.总结 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.页顶导航栏 <divstyle"display: flex;justify-content: space-between;alig…

2732. 找到矩阵中的好子集

题目 给你一个下标从 0 开始大小为 m x n 的二进制矩阵 grid。 从原矩阵中选出若干行构成一个行的非空子集&#xff0c;如果子集中任何一列的和至多为子集大小的一半&#xff0c;那么我们称这个子集是好子集。 更正式的&#xff0c;如果选出来的行子集大小&#xff08;即行的…

考研数学|线代零基础,听谁的课比较合适?

线性代数是数学的一个重要分支&#xff0c;对于考研的学生来说&#xff0c;掌握好这门课程是非常关键的。由于你之前没有听过线性代数课&#xff0c;选择一个合适的课程和老师就显得尤为重要。 以下是一些建议&#xff0c;希望能帮助你找到合适的课程资源。 首先&#xff0c;…

迁移方案详解|使用YMP从异构数据库迁移到YashanDB

数据迁移简介 01典型场景与需求 在国产化浪潮下&#xff0c;数据库系统的国产化替代成为了一个日益重要的议题&#xff0c;有助于企业降低对外依赖&#xff0c;提升信息安全和自主性。 以Oracle、MySQL为代表的传统关系型数据库管理系统&#xff0c;在企业应用中占据了重要的…

食品供应链管理商城系统的设计、实现和代码

上线食品供应链管理商城系统的设计与实现是一项复杂且重要的任务&#xff0c;它不仅涉及到技术层面的具体实现&#xff0c;还包括业务流程的优化和用户体验的提升。本文将从系统设计、功能模块、技术选型以及实现步骤等方面进行详细探讨。 ### 系统设计 在设计食品供应链管理…

cad转换pdf怎么转换?介绍四个转换方法

cad转换pdf怎么转换&#xff1f;在数字化办公日益盛行的今天&#xff0c;CAD图纸的转换与处理成为许多专业人士不可或缺的技能。特别是在需要将CAD图纸转换为PDF格式时&#xff0c;一款功能强大的软件能够大大提高工作效率。今天&#xff0c;就为大家推荐四款CAD转PDF的神器&am…

Docker 安装Nginx部署网站 防火墙端口 数据卷挂载

拉取镜像 docker pull nginx#不写版本号 表示最新版本查看是否拉取成功 docker images#成功 nginx latest 605c77e624dd 2 years ago 141MB mysql 8.0 3218b38490ce 2 years ago 516MB mysql latest 3218b38490ce 2 years ago 5…

【乐吾乐2D可视化组态编辑器】水位随数据动态变化

External Player - 哔哩哔哩嵌入式外链播放器 示例&#xff1a;进度条&#xff0c;通常用来展示水位变化 乐吾乐2D可视化组态编辑器demo&#xff1a;https://2d.le5le.com/ 示例&#xff1a;乐吾乐2D可视化 (le5le.com)

项目实训-vue(十三)

项目实训-vue&#xff08;十三&#xff09; 文章目录 项目实训-vue&#xff08;十三&#xff09;1.概述2.处理按钮 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.处理按钮 实现了图片的上传之后&#xff0c;还需要设置具体的上传按钮。 这段代码使用 Element UI 的 …