目录
引言:当我们在工作中遇到重复执行的工作时,我们可以写脚本来实行自动化,这样就可以方便我们不必要的麻烦,以及节省资源,除此之外,函数也会经常用到,可以更加简洁的编写脚本。
1、for循环语句
使用 for 循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令序列,直到变量值用完退出循环
1.1、for语句的结构
读取不同的变量值,用来逐个执行同一组命令
for 语句的执行流程
首先将列表中的第1个取值赋给变量,并执行 do···done 循环体中的命令序列
然后将列表中的第2个取值赋给变量,并执行循环体中的命令序列……
以此类推,直到列表中的所有取值用完,最后将跳至 done 语句,表示结束循环
案例:
1.2、案例
列出奇偶数
执行脚本,列出奇偶数
批量添加用户
用户存放在user.txt文件中,调用这个文件,根据这个文件来进行批量创建用户
编写脚本实现批量创建用户
执行脚本并查看
批量删除用户
根据IP地址检查主机状态
将IP地址存放在ipadds.txt文件中,调用文件中IP地址进行检测主机状态
编写脚本实现查看文件中IP地址主机的状态
执行脚本
密码次数验证
执行脚本
随机抽奖将本
for循环嵌套

九九乘法表

随机生成密码(18位)
2、while语句
for循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使用另一种循环—while语句。
2.1、while语句的结构
重复测试某个条件,只要条件成立则反复执行
执行流程
首先判断 while 后的条件测试操作结果,如果条件成立,则执行 do···done 循环体中的命令序列
返回 while 后再次判断条件测试结果,如果条件仍然成立,则继续执行循环体
再次返回到 while 后,判断条件测试结果…如此循环
直到 while 后的条件测试结果不再成立为止,最后跳转到 done 语句,表示结束循环
2.2、案例
输出1-30之间不能被3整除的数
猜数字游戏
猜商品的价格
逛商场购物
break 和continue的区别
break :跳出单个循环
continue :终止每次循环中的命令,但是不会完成终止命令
continue 语句只结束本次循环,而不是终止整个循环。break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立,并执行当前循环之后的语句。而且,continue 只能在循环语句中使用,即只能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何语句中使用。
案例
break
continue
3、until 语句
重复测试某个条件,只要条件不成立则反复执行
只要while后面的命令退出状态为0,while循环就一直执行下去,until命令与while命令相似,唯一的区别在于,只要until后面的命令退出不为0,until循环就一直执行下去,也就是说,使用until语句重复执行一段代码直到条件为真为止,与while类似
3.1、until 循环语句的结构
3.2、案例
计算1-20的和值
二、shell 函数
将命令序列按格式写在一起
可方便重复使用命令序列
1.1、函数返回值
return表示退出函数并返回一个退出值,脚本中可以用$? 变量显示该值使用原则
函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
退出状态码必须是0~255,超出时值将为256取余
1.2、函数的基本格式(案例)
会优先执行最后一个命令序列
或者
函数定义完之后并不会自动执行,需要调用才行
好处在于可以写一段功能代码作为函数,有需要就直接调用定义的时候哪怕出现语法错误也没关系,不调用就不会报错
当然我们写函数最终目的还是为了调用,为了实现某个功能块。
1.3、函数的作用范围
函数在Shell脚本中仅在当前Shell环境中有效
Shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
local一般用于局部变量声明,多在在函数内部使用。
shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。
shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。
如果同名,Shell函数定义的local变量会屏蔽脚本定义的global变量。
1.4、案例
函数调用yum本地仓库
return的用法
return返回值测试条件语句的正确性
返回值为0
$?返回值为8
return可以定义非零$?也表示正确
执行脚本,正确返回值也可以是非0
local 定义函数变量全局与局部
2、参数的用法
参数的用法
函数名称、参数1、参数2、参数3 ..........
参数的表示方法
$1 $2 $3 .......${10} ${11}.......
2.1、案例
调用2个数的和(位置变量)
调用函数删除文件
执行脚本,已删除相应的文件
列出目录文件列表,目录用颜色表示(蓝色),文件显示层级关系
2.2、阶乘

三、shell 数组
1、数组的定义
数组的存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用
1.2、数组的分类
普通数组:不需要声明直接定义,下标索引只能是整数
关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串
1.3、数组的定义方式
(30 20 10 60 50 40)
0 1 2 3 4 5
第一种:直接把要加入数组的元素用小括号括起来,中间用空格分开
num=(11 22 33 44)
${#num}显示字符串长度
数组名=(value0 value1 value2)
第二种:直接把要加入数组的元素用小括号括起来,中间用空格分开
num=([0]=55 [1]=66 [2]=77 [4]=88)
数组名=([0]=value [1]=value [2]=value [4]=value...)
第三种:先把要记入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组
list=“11 12 13 14”
num=($list)
1.4、冒泡排序
基本思想
冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
算法思路
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。
案例
四、总结
本篇主要讲述了for循环,又有人称之为条件循环,或者for i in ,其实就是for循环的特性,次数和给与的条件是成正比的。主要写了很多实用且简单的一些循环脚本案例,以及for语句的结构,while语句的结构、until语句的结构,以及还介绍了shell函数定义的方法,数组的使用方法。
原文链接:https://blog.csdn.net/weixin_56270746/article/details/124478661
此处评论已关闭