1.程序流程控制实例
程序流程控制, 实际上就是改变程序的执行顺序. 程序在执行过程中若流程被改变, 就可能导致输出不同, 因此利用这一特性就能够实现程序执行结果的控制. 程序流程控制可分为 "选择" 和 "循环" 这两类, 在需要根据实际需求的不同实现不同的输出时, 就可以改变程序的执行流程.
(1)for 循环语句
基于 for 语句的循环, 基于继续执行循环或者结束循环的方式. 在 for 执行命令前, 其会先检查所要执行的列表中所指定的值是否还有未使用的, 若有未使用的就赋值并执行列表, 直到列表中的值全部都使用过后才退出循环.
如下是一个简单的 for 控制语句的脚本程序, 其使用 "星期" 作为变量名, 并从列表中读取值, 直到读取完成后退出.
我们执行一下
说明:
第 03 行, 所定义的变量名为 week, 其值为 Monday~ Sunday.
第 05 行, 使用 echo 回显变量 week 的值.
(2)while 循环语句
while 循环语句结构是一种执行一系列命令的语句结构, 它所执行的命令由测试条件所决定, 这些条件定义语句是否继续执行.
在 while 循环语句中执行命令, 若条件为真, 则将过程执行一遍并回到开始处, 接着再次进行条件的判断, 若条件仍然是真, 则接着再执行一遍, 直到条件为假时才退出循环. 如下是一个数值运算的 while 循环脚本, 其实现的是数值相加运算.
执行一下看一下结果
说明:
第 03 和 04 行, 声明 x 和 sum 都为整型变量并赋予初始值.
第 05 行, 条件测试.
第 06~09 行, 这是一个循环体, 当执行遇到 done 后, 跳到第 06 行处继续执行, 直到条件不满足时退出循环.
第 10 行, 输出总数值.
(3)until 循环语句
与 for 和 while 循环体一样, until 循环也执行一系列的命令, 直到条件满足后退出循环. until 循环在循环体的顶部继续判断条件, 直到条件为真时结束循环, 否则一直执行.
以下脚本使用 until 语句来实现一个简单的, 不断循环的输出预设值, 直到人为干预时结束循环 (按 Ctrl+C 组合键退出).
(4)if 选择分支语句
看一下执行结果:
说明:
第 03 行, 使用 cat 命令从当前目录的 testwhile.sh 文件中读取信息, 然后通过管道传送到 grep 命令进行过滤. 其中,^ 表示检查的关键字是该行的开始.
第 04 行, 若所需查看的信息存在, 则输出提示.
第 05 行, if 语句结束的标记.
if 语句的另外一种结构是 if-then-else, 这种 if 语句可以实现先判断, 然后根据判断的结果选择执行脚本代码块, 也就是说, 不管条件判断的结果怎么样都有输出. 如下实例的主要作用是将读取到的数值与预设值对比, 然后根据对比结果执行代码.
看一下执行结果:
说明:
第 03 行: 提示用户输入.
第 04 行, 读取用户的输入并放到 JOB 变量中.
第 05~10 行, 判断输入的值并执行对应的代码块.
(5)case 选择语句
若需要判断的条件达到一定数量, 仍选择使用 if 语句来实现, 语句就会变得不易编写且代码变得沉长, 同时也给日后的维护工作带来不便.
case 语句的出现, 在很大程度上弥补了 if 语句的不足, case 语句允许通过条件的判断选择执行不同的代码块. 但需要注意的是, case 对变量的使用不是强制性的, 且每条语句都以右小括号结尾, 每个代码块都以两个分号结尾.
通过 case 结构来实现为多分支功能, 可以使程序代码不但易读而且其结构更加简洁. 下面使用 case 结构来实现一个名字检索脚本, 脚本中的变量值在条件成立时就执行相应代码. 脚本的命令读取输入信息, 并判断是否存在所输入的信息, 之后就执行相应的代码块.
对于以上的问题, 可以, 看如下的例子.
运行结果:
说明:
第 04 行,$name 中的值为待测变量.
第 06 行, 需要与待测变量值对比的预设值.
第 09 行, 输出一个空行.
第 11 行, 如果第 05 行的值与预设值都不同, 则对比此处的值.
第 16 行, case 语句结束的标记.
完成之后, 将所写的代码进行保存然后退出.
2.算术运算实例
算术是数学中最古老, 最基础和最初等的部分, 它研究的是数的性质和运算. 从数学的本质上来说, 算术属于一种映射, 是一种获得新变量的可能组合. 而常说的从算术中所得到的新变量, 其实是由算术式的运算得到的.
算术式是由运算符和操作数组成, 如: 3+6. 其中的运算符为加号 (+), 而操作数为 3 和 6, 所映射得到的新量为 9. 在算术式中, 其可以包含变量, 变量扩展. 在进行算术计算前, 变量会被替换, 而在括号内的变量也会被展开.
3+6=9 的加法运算, 是一个最为常见的一元运算, 在本质上是 A+B→C 的映射方式. 其他常见的运算还有减法, 乘法以及开方等, 它们都属于一元运算, 本质上是 A→B 形式的映射.
算术运算由运算符和操作数组成, 由它们映射成一个新的量, 下面是一个没有包括任何变量扩展的算术例子.
在算术中, 运算符为加号, 其操作数为 3 和 6, 在做这个运算时并不需要进行变量展开就可以直接得到结果为 9. 而在一些需要包含变量以及变量扩展时, 在运算之前则需要扩展变量, 如下例所示.
由于存在变量扩展, 因此在运算前需要扩展变量. 其操作流程是: 若变量 i 的值不存在, 则 ${i:-3} 展开后其值为 3, 之后再与 6 做加法运算, 其最后的结果为 9. 而若变量 i 存在值, 则在扩展后取 i 的值, 然后再与 6 相加.
在求值运算过程中, 由于变量值不存在或者当其值为空时, 该变量的值默认为 0.
在一个存在变量的算术运算式中, 在引用变量的值之前需要先定义, 然后才可以引用. 若变量没有赋予值, 则在引用时视它为 0.
事实上, 乘除法运算与加减法也非常类似, 只要将运算符修改并注意在进行除法运算时除数与被除数的一些问题就可以了.
如下:
来源: https://www.cnblogs.com/xixiuling/p/10338829.html