当前位置: 首页 > news >正文

【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 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加:
注意:
表达式和运算符之间要有空格 ,例如 2+2 是不对的,必须写成 2 + 2
完整的表达式要被 ` 包含,注意不是单引号,在 Esc 键下边。
下表列出了常用的算术运算符,假定变量 a 10 ,变量 b 为 20:
注意: 条件表达式要放在方括号之间,并且要有空格,例如 : [$a==$b] 是错误的,必须写成 [ $a == $b
]

2 例子

1.7流程控制

1 if else

1.1 if
if 语句语法格式:

demo

 

末尾的 fifi 就是 if 倒过来拼写,后面还会遇到类似的。
1.2 if else
if else 语法格式:
1.3 if else-if else
if else-if else 语法格式:

以下实例判断两个变量是否相等: 

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 10 ,变量 b 20

案例:

 

2 for 循环

2.1 格式

2.2 随堂练习

 

代码如下:

3 while 语句

while 循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式
为:

需求: 计算 1~100 的和

 运行脚本,输出:

使用中使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量,
具体可查阅: Bash let 命令

4 无限循环

无限循环语法格式:

 

5 case(switch)

Shell case 语句为多选择语句。可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的
命令。 case 语句格式如下:
case 工作方式如上所示。取值后面必须为单词 in ,每一模式必须以右括号结束。取值可以为变量或常
数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果
无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
下面的脚本提示输入 1 4 ,与每一种模式进行匹配:

输入不同的内容,会有不同的结果,例如:

6 跳出循环

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环, Shell 使用两个命令来实现该功能:
break continue
6.1 break 命令
break 命令允许跳出所有循环(终止执行后面的所有循环)。

 

6.2 continue
continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

1.8 函数使用

1 函数的快速入门

格式

可以带 function fun() 定义,也可以直接 fun() 定义 , 不带任何参数。
参数返回,可以显示加: return 返回,如果不加,将以最后一条命令运行结果,作为返回
值。 return 后跟数值 n(0-255)
快速入门

2 传递参数给函数

Shell 中,调用函数时可以向其传递参数。在函数体内部,通过 的 形 式 来 获 取 参 数 的 值 , 例 如 , 1 表示
第一个参数, $2 表示第二个参数 ...
带参数的函数示例:

输出结果:

 

注意, 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 {10} 。当 n>=10 时,需要使用 ${n} 来获取参数。
另外,还有几个特殊字符用来处理参数:
        

1.9 数组

1 定义数组

数组中可以存放多个值。 Bash Shell 只支持一维数组 (不支持多维数组),初始化时不需要定义数组大
小(。
与大部分编程语言类似,数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用 " 空格 " 符号分割开,语法格式如下:
array_name=(value1 value2 value3 ... valuen)
1.1 实例

读取数组元素值的一般格式是:

2.1 实例

执行脚本,输出结果如下所示:  

2.2 获取数组中的所有元素
使用 @ * 可以获取数组中的所有元素,例如:

执行脚本,输出结果如下所示:

 

2.3 获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:

执行脚本,输出结果如下所示:

3 遍历数组

3.1 方式一

3.2 方式二

1.10 加载其它文件的变量

1 简介

和其他语言一样, Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的
文件。
Shell 文件包含的语法格式如下:

 

2 练习

定义两个文件 test1.sh test2.sh ,在 test1 中定义一个变量 arr=(java c++ shell), test2 中对 arr 进行循
环打印输出。
第一步: vim test1.sh

第二步: vim test2.sh

 

第三步: 执行 test2.sh

 

好处 :
1. 数据源 和 业务处理 分离
2. 复用 代码扩展性更强

 

相关文章:

  • Redis 备份恢复(持久化)手册
  • 【Linux】01-Linux系统CentOS7虚拟机VMware安装保姆级教程
  • Go语言各种扩容机制(防止混淆)
  • Pytorch深度学习——线性回归实现 04(未完)
  • 虚拟内存、锁页内存、内存分页、分段、段页式内存管理(超详细)
  • 【BOOST C++】教程4:常量和宏
  • 不可以涩涩!AI续写软件初体验;迁移学习路线图;谷歌新闻非官方搜索API;CS295『因果推理』2021课程资料;前沿论文 | ShowMeAI资讯日报
  • 高项_第十四章信息文档管理与配置管理
  • 07 nginx 的 worker process 的调试
  • 时间序列预测:用电量预测 04 Std_Linear(多元线性回归算法 数据标准化)
  • boost之跨平台 错误处理
  • 【Shell编程】字符截取命令awk、sed命令
  • 阿里国际、ebay测评自养号,如何看待自己产品的销量?
  • FCOS网络详解
  • 前端异常监控系统
  • #Java异常处理
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Java 网络编程(2):UDP 的使用
  • Java|序列化异常StreamCorruptedException的解决方法
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • nodejs调试方法
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SOFAMosn配置模型
  • supervisor 永不挂掉的进程 安装以及使用
  • ucore操作系统实验笔记 - 重新理解中断
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 将 Measurements 和 Units 应用到物理学
  • 近期前端发展计划
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 删除表内多余的重复数据
  • 深入浅出Node.js
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用common-codec进行md5加密
  • 数据仓库的几种建模方法
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • # 数论-逆元
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (07)Hive——窗口函数详解
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)iOS字体
  • (转)德国人的记事本
  • (转载)Linux 多线程条件变量同步
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net FrameWork总结
  • .Net面试题4
  • /proc/stat文件详解(翻译)