
bash shell脚本发行循环简介(3)循环
什么是循环执行?
多次重复代码段
重复运行几次:
循环数是预先知道的
循环数事先未知
有出入条件
相关命令: for,while,直到selet
使用for命令
功能:
依次将列表中的元素分配给“变量名称”;每次分配后执行一次循环体;直到列表中的元素用尽,循环结束
命令格式:
表示列表中的变量名;做
循环主体(执行命令正常执行)
声明1
声明2
声明3
...
完成
列表生成方法:
(1)直接给出列表
(2)整数列表:
(a){start..end}
(b)$(seq [开始[步骤]]结束)
(3)返回列表的命令
$(命令)
(4)使用glob,例如: * .sh
(5)变量引用;
$ @,$ *
for命令的示例1,使用for循环增加用户user1-10

对于命令示例2,使用for循环显示99个乘法表

使用while命令
功能:
while命令判断条件: 循环控制条件;进入循环之前,请先进行判断;在每个循环之后,将再次进行判断;条件为“真”,则执行循环;直到条件测试状态为“假”为止.
因此: CONDTION通常应具有一个循环控制变量;并且该变量的值将在循环体内不断修改
进入条件: 条件为true;
退出条件: 条件为假.
命令格式
在CONDITION期间;做
圆形物体
完成
while命令的示例1,使用while查找1..100之间的正整数之和

while命令的示例2,使用while查找10个随机数的最大值和最小值

while命令的示例3,使用while输出国际象棋棋盘

使用直到命令
功能:

与输入相同,只是输入条件相反.
输入条件: CONDITION为假
退出条件: 条件为真
命令格式:
直到条件;做
圆形物体
完成
直到命令示例1,使用直到随机生成10个以内的数字以实现猜词游戏. 如果提示的大小相对较大,则在相等时退出.

直到命令示例2为止,使用直到命令打印99乘法表

继续使用循环控制语句
使用环境: 用于循环体内
continue [N]: 提前结束当前的第N层,直接进入下一轮判断;最内层是第1层
CONDTIITON1时;做
CMD1
...
如果条件2;然后
继续
fi
CMDn
...
完成
继续命令示例1;当循环遇到5时,跳出当前循环并继续下一个循环

继续命令示例2;当循环满足当前条件时,跳出当前循环并继续下一个循环

使用break in loop控制语句
使用环境: 用于循环体内
break [N]: 尽早结束N层循环,最内层是第1层
CONDTIITON1时;做
CMD1
...
如果条件2;然后
休息
fi
CMDn
...
完成
中断命令示例1,当满足条件时,跳出当前循环并执行下一个echo命令

中断命令示例2,当满足条件时,跳出当前循环并执行下一个echo命令

无限循环控制(按ctrl + c退出)
无限循环时: 让条件始终为真,进入无限循环时让
同时为true;做
圆形物体
完成
直到无限循环: 让条件始终为falseshell脚本 函数,并让其进入无限循环
直到错误;做
圆形物体

完成
while循环的特殊用法(遍历文件的每一行)
读行时;做
圆形物体
完成 PATH / FROM / SOMEFILE
依次读取/ PATH / FROM / SOMEFILE文件中的每一行,并将该行分配给变量行
示例1,计算uid的总和

示例2
扫描/ etc / passwd文件的每一行. 如果“ GECOS”字段为空,请填写用户名和单位电话号码62985600,并提示用户的GECOS信息已成功修改.

for循环的特殊格式: 双括号方法C风格的变量操作
for((控制变量的初始化;条件判断的表达式;控制变量的修改的表达式))
做
圆形物体
完成
((...))格式的双括号方法也可以用于算术运算
双括号方法还可以使bash Shell实现C风格的变量操作
#I = 10
#((I ++))
控制变量的初始化: 仅在到达循环代码段时执行一次
控制变量的修改表达式: 每轮结束时,将首先执行控制变量校正操作,然后进行条件判断
工作原理: 按符号顺序执行1-2-3-4,然后2-3-4-2-3-4-2这样循环,
直到不满足程序2的条件,循环才退出.

示例: 使用for的大括号c语言样式打印1至10

选择循环和菜单
在列表中选择变量;做
循环主体命令
完成
select循环主要用于创建菜单,按数字顺序显示的菜单项将显示标准错误,并显示PS3提示符,等待用户输入
用户在菜单列表中输入数字并执行相应的命令
用户输入保存在内置变量REPLY中.
select是一个无限循环,因此请记住使用break命令退出循环,或使用exit命令终止脚本. 您也可以按ctrl + c退出循环.
select通常与大小写一起使用
类似于for循环,您可以省略in列表并在此时使用position参数
选择示例:

示例2


函数功能介绍
1)函数功能是由几个shell命令组成的语句块,以实现代码重用和模块化编程.
2)它与Shell程序的形式相似,不同之处在于它不是一个独立的进程,不能独立运行,而是Shell程序的一部分.
3)函数和shell程序相似,区别在于:
Shell程序在子Shell中运行
Shell函数在当前Shell中运行. 因此,在当前的Shell中,该函数可以修改Shell中的变量
定义功能
函数由两部分组成: 函数名称和函数主体.
语法1:

函数f_name {
...功能主体...
}
语法2:
f_name(){
...功能主体...
}
功能用法
函数的定义和使用:
可以在交互式环境中定义功能
您可以将该功能作为脚本的一部分放在脚本文件中
可以放在仅包含函数的单独文件中
调用: 该函数仅在调用时才会执行;
调用: 给定的函数名称
出现功能名称的地方,它将自动替换为功能代码
函数的生命周期: 在调用时创建,并在返回时终止
定义并使用函数示例;定义双重添加功能

函数返回值
该函数有两个返回值:
函数执行结果的返回值:
(1)使用echo或printf命令输出
(2)函数主体中调用命令的输出
该功能的退出状态代码:
(1)默认值取决于函数中最后执行的命令的退出状态代码
(2)自定义退出代码,格式为:
从函数返回return,使用最后一个状态命令确定返回值
返回0,返回没有错误.
返回1-255错误返回
示例: 自定义返回值

在交互式环境中定义和使用功能
示例:
abc(){
> ls-l
>}
定义函数后,键入abc,其显示结果与ls-l相同.
abc功能将一直保留到用户退出系统或执行如下所示的unset命令: unset abc


定义和使用脚本中的功能
该功能必须在使用前定义,因此该功能定义应放置在脚本的开头,直到外壳程序首次找到它为止.
调用函数仅需使用其函数名.
示例:

使用功能文件
您可以将常用功能保存到功能文件中,然后将功能文件加载到外壳中.
可以任意选择文件名,但是最好与相关任务建立联系. 例如: functions.main
功能文件一旦加载到外壳中,就可以从命令行或脚本中调用该功能. 您可以使用set命令查看所有定义的功能. 输出列表包括已加载到外壳中的所有函数.
要更改功能,请首先使用unset命令从外壳中删除该功能. 进行更改后,请重新加载该文件.
创建功能文件

功能文件示例:

加载功能
创建功能文件后,将其加载到外壳程序中
查找功能文件并将其加载到shell中的格式:
. 文件名或源文件名
注意: 这是
此处的文件名必须具有正确的路径
示例: 对于以上示例中的功能,可以使用以下命令:
source myFuntions.main

检查加载功能
使用set命令检查该功能是否已加载. set命令将在外壳中显示所有已加载的函数.
示例:

执行shell函数
要执行功能,只需键入功能名称:
示例:

删除shell函数
现在对功能进行一些更改. 首先删除该功能,使其无法在外壳上使用. 使用unset命令来完成此功能.
命令格式为:
取消设置功能名称
再次输入set命令,该功能将不再显示
示例:

功能参数
该函数可以接受参数:
将参数传递给函数: 调用函数时,只需在函数名称后用空格分隔给定的参数列表即可;例如“ testfuncarg1 arg2…”
在函数体中,您可以使用$ 1,$ 2,…来调用这些参数;您还可以使用$ @,$ *,$#和其他特殊变量
示例:

函数变量
可变范围:
环境变量: 当前的外壳和子外壳有效
局部变量: 仅在当前的shell进程中有效,将启动专用的子shell进程来执行脚本;因此,局部变量的范围是当前的Shell脚本程序文件,包括脚本中的函数.
局部变量: 函数的生命周期;函数结束时变量将自动销毁
注意: 如果函数中有局部变量,则其名称与局部变量相同,请使用局部变量.
在函数中定义局部变量的方法
本地名称= VALUE
示例: 定义不同的变量

函数的递归示例
函数递归:
该函数直接或间接调用
请注意递归层数
递归示例:
阶乘是Keston Kaman在1808年发明的算术符号,
正整数的阶乘是小于等于该数字的所有正整数的乘积,0的阶乘为1. 自然数n的阶乘记为n!.
n! = 1×2×3×...×n.
也可以递归定义框架: 0! = 1,n! =(n-1)! ×n.
n! = n(n-1)(n-2)…1
n(n-1)! = n(n-1)(n-2)!

原创文章,作者: 〜微风〜,应转载shell脚本 函数,请注明出处:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-223794-1.html
我们的海军和先进武器在哪
这是阴险狡诈的计量