1、特殊流程控制语句介绍

Shell程序或者说其他的程序,都是顺序执行的,也就是第一行执行完再执行第二行,以此类推,依次执行。

而流程控制语句,如:

  • if条件判断语句,你只有条件成立了,才能够执行,否则就不执行其中的程序,这就会跳过一些执行命令。
  • for循环也是流程控制类语句,是重复执行指定次数的相同代码。

除了上面的条件判断语句和循环语句外,还有特殊流程控制语句。

比如:exit语句、break语句、continue语句。

2、exit语句

系统有一个exit命令,用于退出当前用户的登录状态。

可是在Shell脚本中,exit语句是用来退出当前脚本的。也就是说,在Shell脚本中,只要碰到了exit语句,后续的程序就不再执行,而直接退出脚本。

exit的语法如下:

exit [返回值]
  • 如果exit语句之后定义了返回值,那么这个脚本执行之后的返回值就是我们自己定义的返回值。可以通过查询$?这个变量,来查看返回值。
  • 如果exit语句之后没有定义返回值,脚本执行之后的返回值是,执行exit语句之前,最后执行的一条命令的返回值。

写一个exit的例子:

需求:判断输入是否为纯数字。

#!/bin/bash
# 演示exit的作用 # 接收用户的输入,并把输入赋予变量num
read -p "Please input a number:" -t 30 num # 如果变量num的值是数字,则把num的值替换为空,否则不替换
# 把替换之后的值赋予变量y
y=$(echo $num | sed 's/[0-9]//g' ) # 说明:
# 就是通过sed命令,把变量num值中的每一个字符,只要是0-9的内容,就替换为空。
# 最后如果y的值最后为空,证明num变量中的内容全部为数字,因为全部被替换了。
# 如果y的值最后不为空,证明num变量中的内容有非数字,即num非纯数字。 # 判断变量y的值如果不为空,输出报错信息,
# 退出脚本,退出返回值为18
if [ -n "$y" ]
then
echo "Error!Please input a number!"
exit 18
# 说明:
# 如果输入的不是数字,上面这两句脚本命令会执行,
# exit语句一旦执行脚本就会终止。
else
# 如果没有退出脚本,则打印变量num中的数字
echo "The number is:$num"

执行该脚本

# 给Shell脚本赋予执行权限
[root@localhost sh]# chmod 755 exit.sh
# 执行脚本
[root@localhost sh]# ./exit.sh
# 输入abc
please input num: abc
# 脚本返回请输入数字
please input number, error!!!! # 查看$?变量,返回18,和我们脚本中设定的一样。
[root@localhost sh]# echo $?
18 # 再次执行脚本,输入123
[root@localhost sh]# ./exit.sh
please input num:123
# 脚本返回结果是输入的数字
# 证明脚本符合需求。
123

3、break语句

特殊流程控制语句break语句的作用,当程序执行到break语句时,会结束整个循环(也就是跳出这个循环,继续之后后边的命令)。

continue语句也是结束循环的语句,不过continue语句跳过当前循环,继续执行下一次循环。

看下示意图解释下break语句:

举个例子:

先编写一个不加break语句的脚本break1.sh

[root@localhost sh]# vim sh/break1.sh

#!/bin/bash
# 输出10次变量i的值
#循环十次
for((i=1;i<=10;i=i+1))
do
# 输出变量i的值
echo $i
done

执行该脚本查看结果:

[root@localhost sh]# chmod 755 break1.sh
[root@localhost sh]#./break1.sh
1
2
3
4
5
6
7
8
9
10

再编写一个加break语句的脚本break2.sh

[root@localhost ~]# vim sh/break2.sh

#!/bin/bash
# 输出10次变量i的值
# 循环十次
for((i=1;i<=10;i=i+1))
do
# 如果变量i的值等于4
if[ "$i" -eq 4 ]
then
# 退出整个循环
break
fi
# 输出变量i的值
echo $i
done

执行该脚本查看结果:

[root@localhost sh]# chmod 755 break2.sh
[root@localhost sh]#./break2.sh
1
2
3

上面两个脚本的对比,可以看出当执行完break语句后,直接跳出了整个for循环。

4、continue语句

continue语句也是结束流程控制的语句。如果在循环中,continue语句只会结束当前单次循环,

画个示意图来说明下continue语句:

举个例子:

直接编写一个加continue语句的脚本continue1.sh

来和上边的break语句中的两个脚本进行对比。

[root@localhost ~]# vim sh/continue1.sh

#!/bin/bash
# 输出10次变量i的值
# 循环十次
for((i=1;i<=10;i=i+1))
do
# 如果变量i的值等于4
if[ "$i" -eq 4 ]
then
# 退出整个循环
continue
fi
# 输出变量i的值
echo $i
done

执行该脚本查看结果:

[root@localhost sh]# chmod 755 continue1.sh
[root@localhost sh]#./continue1.sh
1
2
3
5
6
7
8
9
10

从上面结果可以看出,continue语句是把第四个循环跳过去了,然后继续执行第5次循环。

这就是continue语句和break语句的区别。

『忘了再学』Shell流程控制 — 39、特殊流程控制语句的更多相关文章

  1. 『忘了再学』Shell流程控制 — 33、if条件判断语句(一)

    目录 1.单分支if条件语句 2.双分支if条件语句 (1)示例1 (2)示例2 什么是流程控制? 普通理解:Shell编写的程序是顺序执行的,也就是说第一命令先执行,然后接着执行第二条命令,然后再下 ...

  2. 『忘了再学』Shell流程控制 — 34、if条件判断语句(二)

    目录 1.多分支if条件语句格式 2.练习 3.说明 4.综合练习 1.多分支if条件语句格式 if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] ...

  3. 『忘了再学』Shell流程控制 — 36、for循环介绍

    目录 1.for循环介绍 2.示例 语法一举例: 语法二举例: 3.for循环总结 4.练习:批量解压缩脚本 方式一:批量解压缩 方式二:批量解压缩 1.for循环介绍 for循环是固定循环,也就是在 ...

  4. 『忘了再学』Shell流程控制 — 38、while循环和until循环介绍

    目录 1.while循环 2.until循环 1.while循环 对while循环来讲,只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止.和for循环的第二种格式for((初始 ...

  5. 『忘了再学』Shell流程控制 — 35、多分支case条件语句

    目录 1.case条件语句介绍 2.case语句需要注意的内容 3.练习 示例1 示例2 1.case条件语句介绍 case语句和if-elif-else语句一样都是多分支条件语句,不过和if多分支条 ...

  6. 『忘了再学』Shell基础 — 1、Shell的介绍

    目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...

  7. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  8. 『忘了再学』Shell基础 — 16、位置参数变量

    目录 1.位置参数变量$n 2.位置参数变量$*和$@ 3.位置参数变量$# 位置參数变量的作用主要用于脚本的传参. 位置參数变量的名称和作用都是确定不能改变的,但是该变量的内容是可以更改的,也就是变 ...

  9. 『忘了再学』Shell基础 — 30、sed命令的使用

    目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...

随机推荐

  1. linux lvm逻辑卷管理之lvdisplay命令

    linux 磁盘管理分fdisk parted 和LVM三种方式,我们这里重点是说lvm 我们来看看LVM基本术语(lvm和传统fdisk分区方式有区别)由于传统的磁盘管理不能对磁盘进行磁盘管理,因此 ...

  2. Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据

    前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...

  3. Postman中文版客户端

    "新冷战"蔓延到生产力工具 前端时间,著名 UI 设计软件 Figma 宣布制裁大疆! 这不仅让中国的互联网从业者纷纷一头冷汗:今天是 Figma,明天会是什么?今天是大疆,明天会 ...

  4. Typecho文章设置永久链接

    说明 想要给Typecho文章一个独立的url,或按照自己的格式来 这时候我们就要设置永久链接 Typecho设置文章永久链接 设置伪静态 伪静态设置要取决于是nginx还是apache,详情请参考& ...

  5. 图片杂乱无章、分享麻烦?HMS Core图片分类服务教你快速筛选、分类、整合相册

    如今手机摄影越来越方便,随手一拍就能记录美好生活.但照片越多,整理越麻烦,有的时候我们想对照片进行二次加工.分享,需要不停翻找相册.HMS Core机器学习服务(ML Kit)提供了图片分类服务,方便 ...

  6. partOne讲解思路

    讲解思路   分解:把一个复杂的大问题,拆解成更可执行.更好理解的小步骤. 模式识别:找出相似模式,高效解决细分问题. 抽象:聚焦最重要的信息,忽视无用细节. 算法:设计一步一步的解决路径,解决整个问 ...

  7. 集合——Collection接口,List接口

    集合:对象的容器,定义了对多个对象进行操作的常用方法.可实现数组的功能 集合和数组的区别: 数组长度固定,集合长度不固定 数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型. 集合的位置 ...

  8. 攻防世界-MISC:pdf

    这是攻防世界新手练习区的第二题,题目如下: 点击附件1下载,打开后发现是一个pdf文件,里面只有一张图片 用WPS打开,没发现有什么不对的地方,参考一下WP,说是要转为word格式.随便找一个在线转换 ...

  9. .NET混合开发解决方案5 WebView2运行时与分发应用

    系列目录     [已更新最新开发文章,点击查看详细] 发布使用Microsoft Edge WebView2的应用程序时,客户端计算机上需要安装WebView2运行时,可以安装自动更新的Evergr ...

  10. 【CSAPP】Shell Lab 实验笔记

    shlab这节是要求写个支持任务(job)功能的简易shell,主要考察了linux信号机制的相关内容.难度上如果熟读了<CSAPP>的"异常控制流"一章,应该是可以不 ...