Shell编程中的循环语句和函数

news2024/12/24 8:26:57

一、for循环语句

        当面对各种列表重复任务时,使用简单的if语句已经难以满足需求,这时就需要for循环语句。for语句的结构为:

for 变量 in 取值列表

do

        命令序列

done

使用for循环语句时,需要指定一个变量及取值列表,针对不同的取值重复执行相同的命令序列,直到列表中的变量用完之后,退出循环。

        for循环的执行流程为:
 

         for循环的应用实例:根据IP地址检查主机状态。

 得出结果为:

二、使用while循环语句

        for循环语句适用于列表对象无规律,且列表来源已固定的场合。而对于按照特定条件执行重复操作的情况,则while更适合。

        在脚本应用中,while可以根据特定的条件反复执行一个命令序列,直到该条件不再满足为止。使用while时也应该注意,不要出现死循环的情况,死循环会导致while中的命令序列会一直重复执行,后边的命令操作将无法执行,因此,应在while内部写入修改测试条件的语句,以便在适当的时候跳出循环。

        while的语法结构:

while 条件测试操作

do

        命令序列

done

        while执行的流程为:

        while循环实例:猜价格游戏

        

三、until循环语句

        until循环与while循环类似,while循环能实现的脚本unti同样也可以实现,但区别是while循环在条件为真是继续执行循环,而unti则是在条件为假时执行循环。until的语法结构和while相似,流程也一样唯一不同的while是条件为真时才会循环,until是条件为假时才会循环。

        until循环实例:计算1~50的和

        

四、shell函数

        Shell函数可用于存放一系列的指令。在Shell脚本执行过程中,函数被之于内存中,每次调用函数时不需要从内存读取,因此运行的速度比较快。通过编写、使用函数,可以提高程序可读性与重用性,避免编写大量重复代码。

        Shell函数定义的方法如下:

[function] 函数名() {

        命令序列

        [return x]

}

  • “function”关键字表示定义一个函数,可以省略;
  • {"符号表示函数执行命令的入口,该符号可以与函数名同行也可以在函数名下一行的句首;
  • }”符号表示函数体结束,两个大括号之间{}是函数体;
  • “命令序列”部分可以是任意的 Shel 命令,也可以调用其他函数;
  • “return”表示退出函数返回一个退出值,通过返回值判断执行是否成功,也可以使用 exit 终止整个 Shell 脚本。

        Shell函数的调用的方法为:函数名 [参数1] [参数2]...。

4.2 函数变量的作用范围

        函数变量的作用范围分为:

  • 局部:局部变量只在函数内部有效,在函数外部不能调用。通常在函数名前加一个"local"关键字来声明局部变量,且只能在声明的函数内部使用。
  • 全局:在整个脚本中都能够使用,注意声明时不要与局部变量冲突。

4.3 函数的参数

        函数参数的用法如下:

函数名称  参数1 参数2 参数3......

在使用函数内部使用函数参数时,要使用"$n"这中形似使用,n是第n个参数。而从第10个参数开始,调用时要用"${n}"的方式。

4.4 递归函数

        递归函数就是指函数自己调用自己。例如:

myFunction() {

        if [ $1 -gt 0 ]

        then

                local num=$1

                let "num=$num-1"

                myFunction $num #这里递归地调用了自己

        fi

}

myFunction 5

五、 Shell数组

        在Shell脚本中,数组是一种常见的数据结构,主要的应用场景包括:获取数组长度、获取元素长度、遍历元素、元素切片、元素替换、元素删除等等。Shell 中的数组与Java、C、Python不同,只有一维数组,没有二维数组。数组元素的大小与限制,也不需要事先定义。Shell 数组用括号()来表示,元素用空格分隔,元素的下标与大部分编程语言类似从0开始。

        数组常用定义方法包括以下几种:

  1. 数组名=(value0 value1 value2......)
  2. 数组名=([0]=value [1]=value [2]=value......)
  3. 列表名=“value0 value1 value2......”           数组名=($列表名)
  4. 数组名[0]=“value”

        数组名[1]=“value”

        数组名[2]=“value”...

        下面通过具体的示例了解数组的基本使用方法:

        1. 获取数组长度

arr_number=(1 2 3 4 5)

arr_length=$(#arr_number[*])

echo $arr_number

5 #输出5

        2. 读取某下表赋值

arr_index2=${arr_number[2]}  #第三个元素

echo $arr_index2

2 #输出2

        3. 数组遍历

        4. 数组切片

arr=(1 2 3 4 5)

echo ${arr[@]} #输出整个数组

1 2 3 4 5 #输出

echo ${arr[@]:0:2}  #${数组名[@或*]:起始位置:长度}

1 2 #输出

echo ${arr[@]:2:3}

3 4 5

        5. 数组替换

arr=(1 2 3 4 5)

echo ${arr[@]/4/66}  #${数组名[@或*]/查找字符/替换字符}

1 2 3 66 5

echo ${arr[@]}  #并不会替换数组原有内容

arr=(${arr[@]/4/66})  #要实现改变原有数组,开通过重新赋值来实现

echo ${arr[@]}

1 2 3 66 5

        6. 数组删除

arr=(1 2 3 4 5)

unset arr  #删除数组

echo ${arr[*]}

arr=(1 2 3 4 5)

unset arr[2]   #删除第三个元素

echo ${arr[*]}

1 2 4 5

六、脚本调试

        为避免编写的脚本出错,除了在编写脚本时注意书写规范,排除语法错误,更重要的是利用调试脚本工具来调试脚本。echo命令是最有用的调试脚本工具之一,一般在可能出现问题的脚本中加入echo命令,采用的是分段排查的方式。除了echo命令之外,bash Shell也有相应参数可以调试脚本。使用bash命令参数调试,命令的语法为:

sh [-nvx] 脚本名

其中参数的含义为:

  • -n:不会执行该脚本,仅查询脚本语法是否有问题,如果没有语法问题就不显示任何内容,如果有问题会提示报错。
  • -v:在执行脚本时,先将脚本的内容输出到屏幕上然后执行脚本,如果有错误,也给出错误提示。
  • -x:将执行的脚本内容输出到屏幕上,这个是对调试很有用的参数。

当脚本过长时,可以通过"set"命令,只调试部分脚本。通过在要调试脚本的上一行写上"set -x",在脚本末行的下一行写上"set -x"即可调试中间的脚本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1707245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

B站pink老师HTML5基础(一)

文章目录 一、网页1.什么是网页2.什么是HTML二、常用浏览器 三、Web标准四、HTML标签1.HTML基本结构标签 五、快捷键六、常用标签1.标题标签2.段落和换行标签3.文本格式化标签4.div标签和span标签5.图像标签6.图像路径7.超链接标签8.特殊字符 一、网页 1.什么是网页 2.什么是H…

【Postman接口测试】第二节.Postman界面功能介绍(上)

文章目录 前言一、Postman前言介绍二、Postman界面导航说明三、使用Postman发送第一个请求四、Postman 基础功能介绍 4.1 常见类型的接口请求 4.1.1 查询参数的接口请求 4.1.2 表单类型的接口请求 4.1.3 上传文件的表单请求 4.1.4 JSON 类…

New Phytologist:杨树特有miRNA在调控杨树抗旱中的分子机制

2024年3月6日,林木遗传育种全国重点实验室、北京林业大学生物科学与技术学院尹伟伦与夏新莉教授课题组在New Phytologist(中科院一区,影响因子9.4)期刊发表了题为“The miR6445-NAC029 module regulates drought tolerance by reg…

iec61850通信协议是什么

EC 61850是国际电工委员会(IEC)制定的一个用于电力系统自动化的国际标准。该协议广泛应用于变电站自动化、配电网自动化和智能电网等领域,旨在实现不同设备和系统之间的互操作性和高效通信。本文将详细介绍IEC 61850通信协议的特点、架构、关…

N进制计数器【02】

大容量N进制计数器 集成计数器容量的扩展 集成计数器级联扩展容量 【例1】由两片 74LS161 级联组成 256 进制(8位二进制)同步加法计数器 【解】级联时,外加时钟信号同时接到各片计数器的时钟输入端,用前级计数器的进位输出 C…

使用ssh连接ubuntu

一、下载连接工具 常见的连接工具右fianlshell、xshell等等。在本文章中使用的finalshell,工具可以去官网上下载,官网下载。 二、Ubuntu中配置shh 1、使用下面指令更新软件包(常用于下载安装或更新软件时使用,更新到最新的安装…

如何取消公众号的在线客服绑定授权

1,功能设置 2,公众号设置 3,查看详情,取消

Excel表格保护密码遗忘怎么办?三秒钟破解密码,轻松解锁!

在我们的日常工作中,Excel表格是一个非常实用的工具,但在某些情况下,我们可能会遇到密码忘记的问题,或者在尝试打开或删除文件时被锁定。别担心,这里有三个简单的解决方法来帮助您解决问题。 一、尝试默认密码或常见密…

香橙派 AIpro 昇腾 Ascend C++ 分类模型适配

香橙派 AIpro 昇腾 Ascend C 分类模型适配 flyfish 文章目录 香橙派 AIpro 昇腾 Ascend C 分类模型适配前言一、PyTorch官网resnet模型处理方式1、PyTorch模型 导出 onnx格式2、完整测试 输出top1结果3、完整测试 输出top5结果 二、YOLOv8官网resnet模型Python处理方式三、昇腾…

摸鱼大数据——Hive表操作——分区表

1、介绍 特点: 分区表会在HDFS上产生目录。查询数据的时候使用分区字段筛选数据,可以避免全表扫描,从而提升查询效率 注意: 如果是分区表,在查询数据的时候,如果没有使用分区字段,它回去进行全表扫描,会降低…

【哈希】闭散列的线性探测和开散列的哈希桶解决哈希冲突(C++两种方法模拟实现哈希表)(1)

🎉博主首页: 有趣的中国人 🎉专栏首页: C进阶 🎉其它专栏: C初阶 | Linux | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 哈希函数与哈希 之 闭散列的线性探测解决哈希冲突 的相关内容。 如…

【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词

目录 本文安装包下载地址注意安装elasticsearch1.上传文件2.解压elasticsearch-6.3.1.tar.gz3.开启远程连接权限4.修改其他配置[root用户操作]5.重启虚拟机6.启动es7.外部访问 安装kibana-61.解压2.配置3.启动kibana4.访问5.在开发工具中做数据的增删改查操作 安装IK分词1.wind…

vue3(一):Vue3简介、创建vue3工程、Vue3中的响应式

目录 一.Vue3简介 1.性能提升 2.源码升级 3.拥抱ts 4.新特性 (1)Composition API(组合API): (2)新的内置组件: (3)其他改变: 二.创建vue…

iOS推送证书过期处理

苹果推送证书的有效期都是一年,将要过期的时候,苹果官方会发邮件提醒。 一、过期 在电脑上找到并打开其它->钥匙串访问; 我的证书可以看到各个App的推送证书,如果过期了,显示红色X 二、重新创建 1、登陆apple开…

智能高效的IDE GoLand v2024.1全新发布 - 进一步升级AI辅助工具

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议,通过一步撤消快速安全重构,智能代码完成,死代码检测和文档提示帮助所有 Go 开发人员,从新手到经验丰富的专业人士,创建快速、高效、和可靠的…

CAS原理技术

CAS原理技术 背景介绍结构体系术语接口原理基础模式1. 首次访问集成CAS Client的应用2. 再次访问集成CAS Client的同一应用3. 访问集成CAS Client的其他应用 代理模式1. 用户在代理服务器上执行身份认证2. 通过代理应用访问其他应用上授权性资源 背景 本文内容大多基于网上其他…

GitLab项目中添加用户,并设置其角色权限等

注意:创建用户(new user),创建完用户然后再项目邀请用户,选择创建过的用户 一、以管理员身份登录GitLab的WebUI并创建用户 1>.使用管理员登录GitLab 使用管理员(root)用户登录成功后,点击如下图所示的小扳手,点击…

废品回收小程序:回收市场下的商业机遇

随着当下大众环保意识的提升,回收行业收到了大众的重视,行业快速发展。在互联网信息技术的支持下,“互联网废品回收”得到了发展,依靠各种技术搭建互联网回收平台,连接到居民与商家,让回收变得更加简单高效…

小猪APP分发:让你的应用轻松上架,免费分发

你是否曾经因为应用无法顺利上架而烦恼?或者,刚刚开发好的应用找不到一个合适的平台进行分发?其实,这些问题都不再是问题,因为“小猪APP分发”来了! 每个开发者都希望自己的应用能够被更多的人下载和使用&…

抖店怎么选品?抖店爆款选品思路技巧,新手直接用!

大家好,我是电商花花。 抖店选品永远是我们做抖店,做电商的核心,店铺想要出单,想要赚钱,我们就一定要学会怎么选品,怎么筛选商品。 而我们绝大多数新手并没有办法保证持续选爆款的能力,如果店…