Linux(3)循环和功能func的bash shell脚本入门

电脑杂谈  发布时间:2020-05-27 08:04:10  来源:网络整理

shell脚本和python脚本_shell脚本 函数_shell调用shell脚本

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

wKioL1e5K2CQr2OVAABK7RFTEdw813.png

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

wKiom1e5LYLQDZneAABjkCvz4Ks683.png

使用while命令

功能:

while命令判断条件: 循环控制条件;进入循环之前,请先进行判断;在每个循环之后,将再次进行判断;条件为“真”,则执行循环;直到条件测试状态为“假”为止.

因此: CONDTION通常应具有一个循环控制变量;并且该变量的值将在循环体内不断修改

进入条件: 条件为true;

退出条件: 条件为假.

命令格式

在CONDITION期间;做

圆形物体

完成

while命令的示例1,使用while查找1..100之间的正整数之和

wKioL1e5O5LSGh2qAAA20DdK4kg027.png

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

wKioL1e5QYmAlq_2AAA9iJCBQSY305.png

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

wKioL1e5RgaSKFXYAABF-nITuoA539.png

使用直到命令

功能:

shell调用shell脚本_shell脚本 函数_shell脚本和python脚本

与输入相同,只是输入条件相反.

输入条件: CONDITION为假

退出条件: 条件为真

命令格式:

直到条件;做

圆形物体

完成

直到命令示例1,使用直到随机生成10个以内的数字以实现猜词游戏. 如果提示的大小相对较大,则在相等时退出.

wKioL1e5Tw6zOIMLAABD-cSpVZQ815.png

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

wKiom1e5UGqQwiBEAABgUqIoWRU723.png

继续使用循环控制语句

使用环境: 用于循环体内

continue [N]: 提前结束当前的第N层,直接进入下一轮判断;最内层是第1层

CONDTIITON1时;做

CMD1

...

如果条件2;然后

继续

fi

CMDn

...

完成

继续命令示例1;当循环遇到5时,跳出当前循环并继续下一个循环

wKiom1e5UcDw0Ph3AAAqjnVVdmc760.png

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

wKioL1e5Ufjh14dXAABD-cSpVZQ966.png

使用break in loop控制语句

使用环境: 用于循环体内

break [N]: 尽早结束N层循环,最内层是第1层

CONDTIITON1时;做

CMD1

...

如果条件2;然后

休息

fi

CMDn

...

完成

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

wKiom1e5UuqAr8crAAA2zK3m_Os561.png

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

wKiom1e5U9LyHTMhAAA0LoClVJE518.png

无限循环控制(按ctrl + c退出)

无限循环时: 让条件始终为真,进入无限循环时让

同时为true;做

圆形物体

完成

直到无限循环: 让条件始终为falseshell脚本 函数,并让其进入无限循环

直到错误;做

圆形物体

shell脚本和python脚本_shell调用shell脚本_shell脚本 函数

完成

while循环的特殊用法(遍历文件的每一行)

读行时;做

圆形物体

完成

依次读取/ PATH / FROM / SOMEFILE文件中的每一行,并将该行分配给变量行

示例1,计算uid的总和

wKioL1e5aBWT5eYxAAAzee9P7D4510.png

示例2

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

wKiom1e5bISiXGgEAABRvXFhSJE569.png

for循环的特殊格式: 双括号方法C风格的变量操作

for((控制变量的初始化;条件判断的表达式;控制变量的修改的表达式))

做

圆形物体

完成

((...))格式的双括号方法也可以用于算术运算

双括号方法还可以使bash Shell实现C风格的变量操作

#I = 10

#((I ++))

控制变量的初始化: 仅在到达循环代码段时执行一次

控制变量的修改表达式: 每轮结束时,将首先执行控制变量校正操作,然后进行条件判断

工作原理: 按符号顺序执行1-2-3-4,然后2-3-4-2-3-4-2这样循环,

直到不满足程序2的条件,循环才退出.

wKiom1e5c0SRklo4AABtj4JLFxQ866.png

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

wKiom1e5csnQsVZ2AAAtJPuiEqI484.png

选择循环和菜单

在列表中选择变量;做

循环主体命令

完成

select循环主要用于创建菜单,按数字顺序显示的菜单项将显示标准错误,并显示PS3提示符,等待用户输入

用户在菜单列表中输入数字并执行相应的命令

用户输入保存在内置变量REPLY中.

select是一个无限循环,因此请记住使用break命令退出循环,或使用exit命令终止脚本. 您也可以按ctrl + c退出循环.

select通常与大小写一起使用

类似于for循环,您可以省略in列表并在此时使用position参数

选择示例:

wKioL1e5jkvTha9EAABBGEax8N4380.png

示例2

44.png

43.png

函数功能介绍

1)函数功能是由几个shell命令组成的语句块,以实现代码重用和模块化编程.

2)它与Shell程序的形式相似,不同之处在于它不是一个独立的进程,不能独立运行,而是Shell程序的一部分.

3)函数和shell程序相似,区别在于:

Shell程序在子Shell中运行

Shell函数在当前Shell中运行. 因此,在当前的Shell中,该函数可以修改Shell中的变量

定义功能

函数由两部分组成: 函数名称和函数主体.

语法1:

shell调用shell脚本_shell脚本 函数_shell脚本和python脚本

函数f_name {

...功能主体...

}

语法2:

f_name(){

...功能主体...

}

功能用法

函数的定义和使用:

可以在交互式环境中定义功能

您可以将该功能作为脚本的一部分放在脚本文件中

可以放在仅包含函数的单独文件中

调用: 该函数仅在调用时才会执行;

调用: 给定的函数名称

出现功能名称的地方,它将自动替换为功能代码

函数的生命周期: 在调用时创建,并在返回时终止

定义并使用函数示例;定义双重添加功能

wKioL1e5khPB08NxAAAZ8mQo0zg539.png

函数返回值

该函数有两个返回值:

函数执行结果的返回值:

(1)使用echo或printf命令输出

(2)函数主体中调用命令的输出

该功能的退出状态代码:

(1)默认值取决于函数中最后执行的命令的退出状态代码

(2)自定义退出代码,格式为:

从函数返回return,使用最后一个状态命令确定返回值

返回0,返回没有错误.

返回1-255错误返回

示例: 自定义返回值

wKioL1e5k1iTu5u3AABK6ilZ12Y441.png

在交互式环境中定义和使用功能

示例:

abc(){

> ls-l

>}

定义函数后,键入abc,其显示结果与ls-l相同.

abc功能将一直保留到用户退出系统或执行如下所示的unset命令: unset abc

wKiom1e5lMeCLj9qAABltYm3BVY661.png

wKioL1e5lMeTnFyEAAAZrCBHEqs046.png

定义和使用脚本中的功能

该功能必须在使用前定义,因此该功能定义应放置在脚本的开头,直到外壳程序首次找到它为止.

调用函数仅需使用其函数名.

示例:

wKiom1e5meaxkfBZAAA1rzjhJKY466.png

使用功能文件

您可以将常用功能保存到功能文件中,然后将功能文件加载到外壳中.

可以任意选择文件名,但是最好与相关任务建立联系. 例如: functions.main

功能文件一旦加载到外壳中,就可以从命令行或脚本中调用该功能. 您可以使用set命令查看所有定义的功能. 输出列表包括已加载到外壳中的所有函数.

要更改功能,请首先使用unset命令从外壳中删除该功能. 进行更改后,请重新加载该文件.

创建功能文件

shell调用shell脚本_shell脚本 函数_shell脚本和python脚本

功能文件示例:

wKioL1e5m_Gx3YcnAAAVnr6xRpw134.png

加载功能

创建功能文件后,将其加载到外壳程序中

查找功能文件并将其加载到shell中的格式:

. 文件名或源文件名

注意: 这是 <文件名>

此处的文件名必须具有正确的路径

示例: 对于以上示例中的功能,可以使用以下命令:

source myFuntions.main

wKioL1e5nefQSVNHAAAX00LDg8I488.png

检查加载功能

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

示例:

wKioL1e5nFai4xeuAAAYU8NKvNA408.png

执行shell函数

要执行功能,只需键入功能名称:

示例:

wKiom1e5nlvz9wSUAAAPiay1xOI042.png

删除shell函数

现在对功能进行一些更改. 首先删除该功能,使其无法在外壳上使用. 使用unset命令来完成此功能.

命令格式为:

取消设置功能名称

再次输入set命令,该功能将不再显示

示例:

wKiom1e5ntbxxQa3AAAg6D1hqLs607.png

功能参数

该函数可以接受参数:

将参数传递给函数: 调用函数时,只需在函数名称后用空格分隔给定的参数列表即可;例如“ testfuncarg1 arg2…”

在函数体中,您可以使用$ 1,$ 2,…来调用这些参数;您还可以使用$ @,$ *,$#和其他特殊变量

示例:

wKiom1e5n5zQb2Y9AAAkwEEAuBM375.png

函数变量

可变范围:

环境变量: 当前的外壳和子外壳有效

局部变量: 仅在当前的shell进程中有效,将启动专用的子shell进程来执行脚本;因此,局部变量的范围是当前的Shell脚本程序文件,包括脚本中的函数.

局部变量: 函数的生命周期;函数结束时变量将自动销毁

注意: 如果函数中有局部变量,则其名称与局部变量相同,请使用局部变量.

在函数中定义局部变量的方法

本地名称= VALUE

示例: 定义不同的变量

wKiom1e5pU3S_w7jAACAbjQv_nI223.png

函数的递归示例

函数递归:

该函数直接或间接调用

请注意递归层数

递归示例:

阶乘是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)!

wKiom1e5qtbjlO7ZAAA8n6LQPgM723.png

原创文章,作者: 〜微风〜,应转载shell脚本 函数,请注明出处:


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-223794-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 张孜
        张孜

        这是阴险狡诈的计量

      • 神田朱未
        神田朱未

        我们的海军和先进武器在哪

      热点图片
      拼命载入中...