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脚本赋予执行权限
[[email protected] sh]# chmod 755 exit.sh
# 执行脚本
[[email protected] sh]# ./exit.sh
# 输入abc
please input num: abc
# 脚本返回请输入数字
please input number, error!!!!
# 查看$?变量,返回18,和我们脚本中设定的一样。
[[email protected] sh]# echo $?
18
# 再次执行脚本,输入123
[[email protected] sh]# ./exit.sh
please input num:123
# 脚本返回结果是输入的数字
# 证明脚本符合需求。
123
3、break语句
特殊流程控制语句break语句的作用,当程序执行到break语句时,会结束整个循环(也就是跳出这个循环,继续之后后边的命令)。
而continue语句也是结束循环的语句,不过continue语句跳过当前循环,继续执行下一次循环。
看下示意图解释下break语句:

举个例子:
先编写一个不加break语句的脚本break1.sh。
[[email protected] sh]# vim sh/break1.sh
#!/bin/bash
# 输出10次变量i的值
#循环十次
for((i=1;i<=10;i=i+1))
do
# 输出变量i的值
echo $i
done
执行该脚本查看结果:
[[email protected] sh]# chmod 755 break1.sh
[[email protected] sh]#./break1.sh
1
2
3
4
5
6
7
8
9
10
再编写一个加break语句的脚本break2.sh。
[[email protected] ~]# 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
执行该脚本查看结果:
[[email protected] sh]# chmod 755 break2.sh
[[email protected] sh]#./break2.sh
1
2
3
上面两个脚本的对比,可以看出当执行完
break语句后,直接跳出了整个for循环。
4、continue语句
continue语句也是结束流程控制的语句。如果在循环中,continue语句只会结束当前单次循环,
画个示意图来说明下continue语句:

举个例子:
直接编写一个加continue语句的脚本continue1.sh。
来和上边的break语句中的两个脚本进行对比。
[[email protected] ~]# 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
执行该脚本查看结果:
[[email protected] sh]# chmod 755 continue1.sh
[[email protected] sh]#./continue1.sh
1
2
3
5
6
7
8
9
10
从上面结果可以看出,
continue语句是把第四个循环跳过去了,然后继续执行第5次循环。这就是
continue语句和break语句的区别。
『忘了再学』Shell流程控制 — 39、特殊流程控制语句的更多相关文章
- 『忘了再学』Shell基础 — 1、Shell的介绍
目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
- 『忘了再学』Shell基础 — 3、echo命令的介绍与使用
目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...
- 『忘了再学』Shell基础 — 4、Bash基本功能(history命令)
目录 1.history历史命令 2.设置命令历史记录的条数 3.清空历史命令 4.历史命令的调用 5.命令与文件的补全 在Linux系统中默认的Shell就是Bourne-AgainShell(简称 ...
- 『忘了再学』Shell基础 — 9、Bash中的特殊符号(一)
目录 1.双单引号 2.双引号 3.$符号 4.反引号 5.$()符号 6.#符号 7.\符号 1.双单引号 '':单引号.在单引号中所有的特殊符号,如$和"`"(反引号)都没有特 ...
- 『忘了再学』Shell基础 — 11、变量定义的规则和分类
目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...
- 『忘了再学』Shell基础 — 2、Shell的作用与分类
目录 1.Shell的作用 2.Shell的分类 1.Shell的作用 Shell除了能解释用户输入的命令,将它传递给内核,还可以: 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果. 在 ...
- 『忘了再学』Shell基础 — 5、Bash基本功能(命令的别名和常用快捷键)
目录 1.给命令设置别名 (1)设置别名的命令格式 (2)命令别名永久生效 (3)别名的优先级 2.Bash常用快捷键 1.给命令设置别名 Linux系统的命令别名我们之前已经说过了,这里再过一边. ...
- 『忘了再学』Shell基础 — 6、Bash基本功能(输入输出重定向)
目录 1.Bash的标准输入输出 2.输出重定向 (1)标准输出重定向 (2)标准错误输出重定向 (3)正确输出和错误输出同时保存 3.输入重定向 1.Bash的标准输入输出 我们前边一直在说,在Li ...
- 『忘了再学』Shell基础 — 8、管道符介绍
我们之前已经有文章说过管道符了,今天这里再简单总结一下用法. 1.行提取命令grep grep命令的作用,是在指定的文件中,搜索符合条件的字符串. 命令格式: [[email protected] ~ ] ...
随机推荐
- Live YUV420 和 OpenCV Mat 的互相转换
1. YUV420 -> Mat 可用于转换接受到的YUV视频源到OpenCV可以识别的数据 Mat myuv( Frame_Height + Frame_Height / 2, Frame_W ...
- thinkphp新增
$m = M('content'); //与 $m = new Model('content')效果一样 $date = array( 'username' => I('username', ...
- js 日期
let date = new Date(); let year = date.getFullYear(); let money = money = date.getMonth() + 1; let d ...
- java.lang.OutOfMemoryError: PermGen space及其解决方法(转载)
java.lang.OutOfMemoryError: PermGen space及其解决方法 分类: java2007-09-11 12:34 162242人阅读 评论(51) 收藏 举报 gene ...
- mysqldump导出部分数据的方法: 加入--where参数
mysqldump导出部分数据的方法: 加入--where参数 mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径 my ...
- SSH web.xml文件配置
启动一个WEB项目的时候, WEB容器会去读取它的配置文件web.xml web.xml中配置的加载优先级:context-param -> listener -> filter -> ...
- Forwarding a Range of Ports in VirtualBox
STAN SCHWERTLY MAY 9, 2012 ARTICLES 3 COMMENTS Doesn't allow forwarding a range of ports through the ...
- axel源码学习(1)——重要流程细节
前面一篇文章的流程太过于简单,基本没有触及到axel的核心,因此本文将要把axel中的几个重要的主要的操作流程单独弄出来看看,还是按照main函数的执行顺序来展开,略去错误处理之类的流程仅仅着眼于最重 ...
- CSS3秘笈:第八章
给网页添加图片 1. 常用来处理图片的CSS属性: (1) border(边框):给图片添加边框. (2) padding(填充):边框和图片之间填充空间. (3) float ...
- Super Jumping! Jumping! Jumping! 基础DP
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...





[email protected] Hdmi2.0 optical transceiver HDMI HD video optical transceiver"/>


