【Shell】算术运算符、流程控制、函数利用、数组以及加载其它文件的变量
文章目录1.6 Shell算术运算符
1 简介
2 例子
1.7流程控制
1 if else
关系运算符
2 for 循环
3 while 语句
4 无限循环
5 case(switch)
6 跳出循环
1.8 函数利用
1 函数的快速入门
2 转达参数给函数
1.9 数组
1 界说数组
2 读取数组
3 遍历数组
1.10 加载其它文件的变量
1 简介
2 训练
1.6 Shell算术运算符
1 简介
Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。 原生 bash 不支持 简朴的数学运算,但是可以通过其他命令来实现,比方expr。 expr 是一款表达式计算工具,利用它能完成表达式的求值操纵。 比方,两个数相加: https://i-blog.csdnimg.cn/blog_migrate/ff28c5e11ead649db38b5e8f034acc5b.png 注意: 表达式和运算符之间要有空格,比方 2+2 是不对的,必须写成 2 + 2。 完整的表达式要被 ` 包含,注意不是单引号,在 Esc 键下边。 下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20: https://i-blog.csdnimg.cn/blog_migrate/c3fee0bdedd28ab0ccae5abe43c69262.png 注意:条件表达式要放在方括号之间,而且要有空格,比方: [$a==$b] 是错误的,必须写成 [ $a == $b ]。 2 例子
https://i-blog.csdnimg.cn/blog_migrate/902f00433e555ece5b367f2e917a7d00.png
https://i-blog.csdnimg.cn/blog_migrate/52007c09c0ffbc59a18bfa40687c0e30.png
1.7流程控制
1 if else
1.1 if if 语句语法格式: https://i-blog.csdnimg.cn/blog_migrate/a74ea32d6e63612cee3e4fa5c5965b39.pngdemo
https://i-blog.csdnimg.cn/blog_migrate/3546c10bf606309b5718dce08acb98cf.png
末端的fifi就是if倒过来拼写,后面还会遇到类似的。 1.2 if else if else 语法格式: https://i-blog.csdnimg.cn/blog_migrate/be37abc0952a79a4c7d25d9b3a0c6dce.png 1.3 if else-if else if else-if else 语法格式: https://i-blog.csdnimg.cn/blog_migrate/51ed16d1f2f43b63d2378f4f404c5b56.png以下实例判断两个变量是否相称:
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20: https://i-blog.csdnimg.cn/blog_migrate/d2d9d5c965d228e617813ef0d7c90578.png案例:
https://i-blog.csdnimg.cn/blog_migrate/0e1b0a9122e94e79eed4fa280b60c365.png https://i-blog.csdnimg.cn/blog_migrate/5016d4d646d81ab139a022df16df5fe1.png
2 for 循环
2.1 格式
https://i-blog.csdnimg.cn/blog_migrate/ff19e3a3a975022c30e698b974b7e1ef.png
2.2 随堂训练
https://i-blog.csdnimg.cn/blog_migrate/03403bb58a522596324c42ea2032b63a.png
代码如下:
https://i-blog.csdnimg.cn/blog_migrate/d8f5d5ca5e97839553d76a0e1ccaaf85.png
https://i-blog.csdnimg.cn/blog_migrate/02935757736e8551130f29ef53b25605.png
3 while 语句
while 循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式 为: https://i-blog.csdnimg.cn/blog_migrate/5c7d492190808dbaca6c50b8c065d5a8.png 需求: 计算 1~100 的和
https://i-blog.csdnimg.cn/blog_migrate/76dca804505680c8e321db8457d0d562.png 运行脚本,输出:
https://i-blog.csdnimg.cn/blog_migrate/221da7874bc11752422207a2648de27c.png
利用中利用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表现变量, 具体可查阅: Bash let 命令 。 4 无限循环
无限循环语法格式:
https://i-blog.csdnimg.cn/blog_migrate/272d74fd70e9d2398f4c6ac094a1cc47.png
https://i-blog.csdnimg.cn/blog_migrate/a74f671ef456afb109bab8228212f9ec.png
https://i-blog.csdnimg.cn/blog_migrate/a1326189b19d5feb0e416bf1054320c5.png
5 case(switch)
Shell case 语句为多选择语句。可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的 命令。 case 语句格式如下: https://i-blog.csdnimg.cn/blog_migrate/02bcf03294265bb2134c18996cf4cb54.png case 工作方式如上所示。取值后面必须为单词 in ,每一模式必须以右括号结束。取值可以为变量或常 数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;; 。 取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果 无一匹配模式,利用星号 * 捕获该值,再执行后面的命令。 下面的脚本提示输入 1 到 4 ,与每一种模式进行匹配: https://i-blog.csdnimg.cn/blog_migrate/40fcd7d50bcde7a57fe58463aaaac23e.png 输入不同的内容,会有不同的效果,比方:
https://i-blog.csdnimg.cn/blog_migrate/3ec1fe8c8b0bf95d562d3b92ae0683e9.png
6 跳出循环
在循环过程中,偶然候需要在未达到循环结束条件时逼迫跳出循环, Shell 利用两个命令来实现该功能: break 和 continue 。 6.1 break 命令 break 命令允许跳出所有循环(终止执行后面的所有循环)。 https://i-blog.csdnimg.cn/blog_migrate/fd6b4ad72d5e993562e0dba370bb3f04.png https://i-blog.csdnimg.cn/blog_migrate/083654d514c5a25eed8a494043179fe7.png
6.2 continue continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。 https://i-blog.csdnimg.cn/blog_migrate/5ed81c314f542b79d9cc567d9a92d2c6.png https://i-blog.csdnimg.cn/blog_migrate/66bddd0b88a89c09059e6f3e375776bb.png
1.8 函数利用
1 函数的快速入门
格式
https://i-blog.csdnimg.cn/blog_migrate/d4e371bda8bea9b3cc5174e651885ea5.png
可以带function fun() 界说,也可以直接fun() 界说,不带任何参数。 参数返回,可以显示加:return 返回,如果不加,将以末了一条命令运行效果,作为返回 值。 return后跟数值n(0-255) 快速入门 https://i-blog.csdnimg.cn/blog_migrate/0aae9b934ab87c2af8e12900d0a02c0b.png2 转达参数给函数
在Shell中,调用函数时可以向其转达参数。在函数体内部,通过 的 形 式 来 获 取 参 数 的 值 , 例 如 , 1表现 第一个参数,$2表现第二个参数... 带参数的函数示例: https://i-blog.csdnimg.cn/blog_migrate/05097bd983f41acc3678e87a198f068e.png输出效果:
https://i-blog.csdnimg.cn/blog_migrate/c8097b05636ce50bb3e3cbb187aa2e52.png
注意, 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 {10}。当n>=10时,需要利用${n}来获取参数。 另外,另有几个特别字符用来处理参数: https://i-blog.csdnimg.cn/blog_migrate/c5401a2d178a6d38d0a44a0bf24b8d7c.png 1.9 数组
1 界说数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要界说数组大 小(。 与大部分编程语言类似,数组元素的下标由0开始。 Shell 数组用括号来表现,元素用"空格"符号分割开,语法格式如下: array_name=(value1 value2 value3 ... valuen) 1.1 实例 https://i-blog.csdnimg.cn/blog_migrate/d1ba47393f56253883dcb2d4a3fce5b5.png读取数组元素值的一样平常格式是:
2.1 实例
https://i-blog.csdnimg.cn/blog_migrate/0c6fb595e29990699fb350017512d807.png
执行脚本,输出效果如下所示:
https://i-blog.csdnimg.cn/blog_migrate/dc31b4ab21da7de7442528edd424d937.png
2.2 获取数组中的所有元素 利用@ 或 * 可以获取数组中的所有元素,比方: https://i-blog.csdnimg.cn/blog_migrate/e0e98650549cd946e3095dde2037fd58.png执行脚本,输出效果如下所示:
https://i-blog.csdnimg.cn/blog_migrate/9f4b9b203472aebcb16a05e4fc43a29e.png
2.3 获取数组的长度 获取数组长度的方法与获取字符串长度的方法类似,比方: https://i-blog.csdnimg.cn/blog_migrate/c12261e80aee9bec340d0eb7a44b5075.png执行脚本,输出效果如下所示:
https://i-blog.csdnimg.cn/blog_migrate/0759b9f7d6013e335c5556cbdf43fb0a.png
3 遍历数组
3.1 方式一
https://i-blog.csdnimg.cn/blog_migrate/2bfbfc0b3190ff5c7b2eaeae821380f0.png
3.2 方式二
https://i-blog.csdnimg.cn/blog_migrate/93279faa0674458c85b7631ad1d27ac4.png
1.10 加载其它文件的变量
https://i-blog.csdnimg.cn/blog_migrate/8d428c7c030065595cd08fade82b1443.png
1 简介
和其他语言一样, Shell 也可以包含外部脚本。如许可以很方便的封装一些公用的代码作为一个独立的 文件。 Shell 文件包含的语法格式如下: https://i-blog.csdnimg.cn/blog_migrate/1d40b84766a694cc32692e360c2e6183.png
2 训练
界说两个文件 test1.sh 和 test2.sh ,在 test1 中界说一个变量 arr=(java c++ shell), 在 test2 中对 arr 进行循 环打印输出。 第一步: vim test1.sh https://i-blog.csdnimg.cn/blog_migrate/a44da656540c95328475191f623f6e57.png 第二步: vim test2.sh
https://i-blog.csdnimg.cn/blog_migrate/5c3fcc68af96340a3a477813926457ca.png
第三步: 执行 test2.sh
https://i-blog.csdnimg.cn/blog_migrate/ee6c62b26d2df8d0d475e8d6861ce3a2.png
利益 : 1. 数据源 和 业务处理 分离 2. 复用 代码扩展性更强
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]