shell中的流程控制

news2024/11/16 3:22:15

条件判断在流程控制中的重要性

有了条件判断才能进行if判断即分支流程,才能进行case的多分支流程,才能进行for循环和while循环。

单分支流程判断

如上图所示,在shell编程中常使用英文状态下的分号来在Linux控制台一次性执行多条命令,这种一次性执行多条命令的格式与使用管道符来操作还不一样,

使用管道符来操作多条命令的话,每一条命令都需要去执行,但是如果使用分支语句和英文逗号的话,并不一定每一条命令都需要去执行。

单分支语句的执行顺序如上图所示,如果条件为真的话,就执行下面一条语句,如果条件为假的话,就跳过需要执行的语句,执行下一条语句。

如上图所示,先执行cd /home/atguigu/ 再执行ls -l 

这样的操作形式常用于if [ 需要判断的条件语句 ] ; then echo OK ; fi

即如果 [ 需要判断的条件语句 ]为真的话,就去执行then与fi之间的语句,如果 [ 需要判断的条件语句 ]为假的话,就跳过then 与fi之间的语句,去执行下一条语句。

这样if [ 需要判断的条件语句 ] ; then 条件为真的时候执行的语句; fi     的语句,即每一条命令并不是一定要去执行。

如上图所示,当我们在脚本中编写分支语句的时候,就需要使用字符串的一个拼接的操作,

因为在实际调用脚本的时候可能要传入的参数为空,这时因为向表达式中传入的参数为空就会报错,所以要进行如上图的·字符串的拼接的操作。

如上图所示,在编写脚本之后,记得使用chmod +x 脚本名称,给脚本加上可执行的权限,当然这里不指定属主,属组,其他用户的话,就默认给全部用户加上对此文件的可执行权限。

如上图所示,是将分支语句跟逻辑与和逻辑或结合起来的语句操作。

if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo OK;fi

如上图所示,if [ $a -gt 18 ] && [ $a -lt 35 ]; 条件为真的话,就执行then 之间的语句  fi  

如果条件为假,就不进行输出打印的操作。

if [ $a -gt 18 -a $a -lt 35 ];表示判断这个参数的数值是否在[ $a -gt 18 -a $a -lt 35 ]区间内,如果在这个区间内就打印OK,如果不在这个区间内就不进行打印输出的操作,

if [ $a -gt 18 -o $a -lt 35 ];表示这个参数的数值满足上述两个条件就可以,就继续执行之后的then  fi 语句,

多分支流程判断

如上图所示,是一个多分支语句示例和一个单分支语句示例,在单分支中必须保证中括号中的不能为空,不然报错,即使不传入参数,也应该保证中括号内有字符,

在多分支语句中,

if [ $2 -lt 18 ]

then

    echo "未成年人"

else

    echo "成年人"

fi

如上所示,如果if中的条件为真的话,就执行then 语句一 否则的话就执行 else 语句二 fi

如上图所示,这是一个调用可执行脚本中的多分支语句的示例。

 

如上图所示,是一个多分支语句,

if [ 条件判断式 ]

then 

    程序

elif [条件判断式]

then 

    程序

else

    程序

fi

如上图所示,

if [ $2 - lt 18 ]

then 

    echo "未成年人"

elif [ $2 -lt 35 ]

then 

    echo "青年人"

elif [ $2 -lt 60 ]

then 

    echo "中年人"

else

    echo "老年人"

fi

如上图所示,在shell编程中的分支语句中每一个执行语句都需要使用then作为一个前提。

shell编程中的case语句

如上图所示,*)之后的语句表示default语句,即默认语句。

如上图所示,这是在shell编程中实际应用case语句的一个案例,

当输入脚本的参数是1时执行语句1,当输入脚本的参数是2时执行语句2,当输入脚本的参数是3时执行语句3,

当输入脚本的参数是意外情况时,就执行default语句,

shell编程中的for循环

对于for循环来说如果想进入for循环中就必须要使用一个条件判断,当条件判断为真时就进入循环,当条件判断为假时就不进入循环。

for循环中((初始值;循环控制条件;变量变化))

do

    程序

done

如上图所示,这是一个for循环示例,当在使用变量的时候必须要在变量的前面加上一个$f的符号,

即sum=$sum + $i但是此时在shell中加法是不能够直接去运用的必须要将这个加和的操作放在中括号内部。

可以在脚本的内部再加上一句echo $sum这样的语句,对最后的结果进行打印输出。

如上图所示,就是调用加和脚本并且对脚本传递参数的结果。

如上图所示,在shell编程中可以在双小括号中正常的使用一些数学上的符号。就不必使用那些复杂的-le这样的运算符了。

如上图所示,在shell编程中使用双小括号可以将数学上的符号正常使用,if ((表达式正确)); then 当表达式正确的时候需要执行语句 ; else 当表达式不正确的时候需要执行的语句。

如上图所示,是在shell中调用for循环的另外一种形式。

如上图所示,是对for循环的一个基本调用,

在shell中大括号的作用是表示一个序列,比如{1..100}这样的形式就表示1-100的序列。

如上图所示,是一个求和的for循环。

如上图所示,编写脚本赋予其执行权限,被引号引起来的$*和$@的作用是不同的,而没有被引号引起来的$*和$@的作用是相同的,都是将获取到的参数区分对待。

如上图所示,这是一个通过使用$*和$@来接收参数从而实现for循环的一个案例。

shell编程中的while循环

如上图所示,与for循环不同的是,在shell编程的while循环中,我们需要在while循环外面进行变量的初始化,在do    done之间进行变量的调整。

如上图所示,这是在使用for循环和while循环完成的1-100的加和,

首先在for循环中

for ((i=1; i <= $1; i++))

do 

    sum=$[ $sum + $i ]//在shell编程中如果想让数学运算符正常生效的话,就需要使用$[  ]如果想调用变量的话,就需要在变量名前面加上$的符号。

done

echo $sum

其次在while循环中

a=1

while [ $a -le $1 ]

do

    sum2=$[ $sum2 + $a ]

    a=$[ $a + 1 ]//对进入循环的变量的调整。

done

echo $sum2

如上图所示,这是一个实现1-100加和的while循环,

let sum2+=a 

let a++

这样let的操作就可以将shell编程中一些比较反人类的运算符的操作,简化一些。

read读取控制台的输入(交互式操作)

如上图所示,这是在创建一个交互式的输入,read -t表示等待用户等待的时间,

-p表示指定读取值时的提示符(这里的提示符可以用引号括起来):  接收参数的变量

echo $变量  对变量的打印输出

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

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

相关文章

FPGA中复位电路的设计

复位电路也是数字逻辑设计中常用的电路&#xff0c;不管是 FPGA 还是 ASIC 设计&#xff0c;都会涉及到复位&#xff0c;一般 FPGA或者 ASIC 的复位需要我们自己设计复位方案。复位指的是将寄存器恢复到默认值。一般复位功能包括同步复位和异步复位。复位一般由硬件开关触发引起…

把Deepin塞进U盘,即插即用!Deepin To Go来袭

前言 小伙伴之前在某篇文章下留言说&#xff1a;把Deepin塞进U盘的教程。 这不就来了吗&#xff1f; 事实是可以的。这时候你要先做点小准备&#xff1a; 一个大小为8GB或以上的普通U盘 一个至少64GB或以上的高速U盘 一个Deepin系统镜像文件 普通U盘的大概介绍&#xff1…

Xtuner微调

环境安装 studio-conda xtuner0.1.17 conda activate xtuner0.1.17 进入家目录 &#xff08;~的意思是 “当前用户的home路径”&#xff09; cd ~ 创建版本文件夹并进入&#xff0c;以跟随本教程 mkdir -p /root/xtuner0117 && cd /root/xtuner0117 拉取 0.1.17 的版…

海外盲盒APP开发,盲盒出海热!

当下&#xff0c;盲盒作为一种热门的娱乐休闲模式&#xff0c;在全球消费市场中都非常火热&#xff0c;各种热门盲盒商品刚一上线就受到了秒杀&#xff0c;受到了各地年轻消费者的追捧&#xff01; 盲盒全球化对于我国盲盒企业来说是一个新的机会&#xff0c;有助于我国盲盒快…

C/S、B/S架构(详解)

一、CS、BS架构定义 CS架构&#xff08;Client-Server Architecture&#xff09;是一种分布式计算模型&#xff0c;其中客户端和服务器之间通过网络进行通信。在这种架构中&#xff0c;客户端负责向服务器发送请求&#xff0c;并接收服务器返回的响应。服务器则负责处理客户端的…

利用Python爬取天气数据并实现数据可视化,一个完整的Python项目案例讲解

要使用Python爬取天气数据并进行制图分析分几个步骤进行&#xff1a; 选择数据源&#xff1a;首先&#xff0c;你需要找到一个提供天气数据的API或网站。一些常见的选择包括&#xff1a;OpenWeatherMap、Weatherbit、Weather Underground等。 安装必要的库&#xff1a;你需要安…

数据库 | 试卷五试卷六试卷七

1. 主码不相同&#xff01;相同的话就不能唯一标识非主属性了 2.从关系规范化理论的角度讲&#xff0c;一个只满足 1NF 的关系可能存在的四方面问题 是&#xff1a; 数据冗余度大&#xff0c;插入异常&#xff0c;修改异常&#xff0c;删除异常 3.数据模型的三大要素是什么&…

PythonWeb前端

摘要 学校的一门选修课&#xff0c;PythonWeb开发从入门到实践&#xff0c;用到的技术有Python,Flask,MySQL,前端三件套等&#xff0c;但因为是选修课&#xff0c;所以都只涉及到了一点点 Web前端基础 1.Web工作原理 概念&#xff1a; Web&#xff0c;万维网&#xff0c;一…

第21篇 Intel FPGA Monitor Program的使用<四>

Q&#xff1a;如何编译运行创建好的Intel FPGA Monitor Program工程呢&#xff1f; A&#xff1a;上一篇的Nios II汇编语言简易应用程序创建完成后&#xff0c;点击Intel FPGA Monitor Program的Action-->Compile即编译程序&#xff0c;在Info&Errors区域显示编译结果…

软件产品进行确认测试有什么好处?第三方软件测试机构分享

软件确认测试是一项旨在验证软件是否符合预期需求和规格的测试活动。通过确认测试&#xff0c;您可以确保软件的功能、性能和用户界面的符合程度&#xff0c;从而降低软件发布后出现问题的风险。 一、软件产品进行确认测试的好处   1、减少软件发布后修复问题的成本。通过及…

SpringBoot整合Minio(支持公有及私有bucket)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SpringBoot整合Minio(支持公有及私有bucket) ⏱️ 创作时间&#xff1…

机器学习课程复习——决策树

Q:这三个算法哪一个可以用来做回归? CART Q:这学期学过的分类算法有哪些? 支持向量机、决策树、k近邻、逻辑回归、朴素贝叶斯、ANN (注意区分分类算法与聚类算法) Q:计算题 根据以上条件,生成相应的决策树 1. ID3算法

Jenkins教程-5-gitee自动化测试任务构建

上一小节我们学习了Jenkins构建gitlab自动化测试任务的方法&#xff0c;本小节我们讲解一下gitee自动化测试任务的构建方法。 接下来我们以windows系统为例&#xff0c;讲解一下构建实际自动化测试任务的具体步骤。 安装git和gitee插件 点击进入Jenkins插件管理页面 安装完插…

mac禁用电池睡眠-mac盒盖连接显示器

mac禁用电池睡眠-mac盒盖连接显示器-mac断点盒盖连接显示器 讲解&#xff1a;mac盒盖的时候连接显示器会睡眠并断开和显示器的连接&#xff0c;只有在电池->选项->选择使用电源适配器的时候防止睡眠&#xff0c;才可以连接电源线外界显示器 但是苹果的电池相当于手机电…

Linux使用lrzsz实现虚拟机和本机进行文件传输

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、lrzsz是什么&#xff1f;二、使用步骤1.下载lrzsz2.文件传输 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 使用lrzsz代替xfpt进行…

大模型时代的具身智能系列专题(一)

通用具身机器人 具身智能定义 从图灵定义看&#xff0c;知识由感知、智能体环境交互获得&#xff0c;具身智能要拥有足够的知识完成机器人任务。从字面上理解就是具有身体的智能&#xff0c;可以从交互中学习并有可能涌现新能力。近期的具身智能更多和大模型和端到端有关&…

KVB投资安全小知识:你知道情绪面、技术面与基本面的关系吗?

摘要&#xff1a;当涉及到金融市场分析时&#xff0c;情绪面、技术面和基本面是三个重要的方面。它们相互交织&#xff0c;共同影响着市场的走势和投资者的决策。下面我来详细解释它们之间的关系。 情绪面的影响 情绪面指的是投资者情绪和市场情绪&#xff0c;它反映了市场参与…

曾从钦:共同做大露酒产业蛋糕,共建露酒产业命运共同体

执笔 | 尼 奥 编辑 | 扬 灵 6月15日&#xff0c;由中国酒业协会主办、五粮液股份公司承办的以“文化焕新&#xff0c;价值绽放”为主题的第三届中国露酒T5峰会在四川省宜宾市召开&#xff0c;参会企业对当前露酒产业现状、结构性矛盾、品类价值表达等议题进行深入探讨和交…

ARM功耗管理框架之LPI

安全之安全(security)博客目录导读 思考&#xff1a;功耗管理框架&#xff1f;SCP&#xff1f;PPU&#xff1f;LPI&#xff1f;之间的关系&#xff1f;如何配合&#xff1f; 目录 一、功耗管理框架中的LPI 二、LPI分类 三、Q-Channel和P-Channel对比 四、Q-Channel和P-Ch…

QT/基于TCP的服务端实现

代码 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),p(new QTcpServer(this))//给服务器指针申请空间 {ui->setupUi(this); }Widget::~Widget() {delete ui; }void W…