shell 脚本之 函数与数组

简介: shell 脚本之 函数与数组

一,函数

(一)函数基本知识

1,函数的形成

在编写脚本时,有些脚本可以反复使用,可以调用函数来解决

语句块定义成函数约等于别名

2,函数使用方法

先定义函数

再使用函数        

3,函数基本格式(三种)

第一种(最常用):

函数名(){

命令序列

}

第二种:

function 函数名 {

命令序列

}

第三种:

function func_name () {

...函数体...

}

4,注意事项

  1. 直接写 函数中调用函数 直接写函数名
  2. 同名函数 后一个生效
  3. 调用函数一定要先定义
  4. 每个函数是独立

5,函数例子

(二)查看函数

declare   -r   看所有函数

declare   -f   看所有函数详细情况

declare   -f   跟函数名    看指定函数详细情况

(三)删除函数

unset 对应函数名

(四)函数的返回值return

1,含义

return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值

2,使用原则

  1. 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
  2. 退出码必须是0-255,超出的值将为除以256取余

3,return 用法

(五)函数的传参数

函数后面可以  接位置变量

(六)使用函数文件

我们可以新建一个专门存放函数的文件

开头先执行 这个文件

后面就可以调用里面的函数

(七)函数的作用范围

1,函数变量会影响 当前环境

2,因此需要把变量 固定在函数里面 local

(八)函数和 定义变量

1,定义变量

做定义变量 脚本里直接使用

2,函数

做函数时 脚本要先写 color 先调用

(九)检测ip 是否合法

二,函数递归

函数调用自己本身的函数

自己调用自己, 看成 有条件的死循环

(一)函数递归定义

1.函数调用自己本身的函数

2.必须要有结束函数的语句,防止死循环

如  func  () {  echo $i;echo "run fast";let i++;func;  }

这就是个病毒,会不断调用自己

(二)阶乘

阶乘就是1x2x3x4x5x6x7x8....xn

1,for 循环写阶乘

2, 函数写阶乘

例如  5的阶   1x2x3x4x5    就是4的阶乘以5

       6的阶    1x2x3x4x5x6      就是5的阶乘以6

所以把以上两个值作为变量

三,数组

(一)数组定义

可以理解为变量的集合

1,变量与数组

  • 变量:存储单个元素的内存空间
  • 数组:存储多个元素的连续的内存空间,相当于多个变量的集合

2,数组名和索引

  • 索引的编号从0开始,属于数值索引
  • 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持

  • 定义关联数组 ,一定要先声明  declare

  • bash的数组支持稀疏格式(索引不连续)

(二)定义数组格式

1,定义数组格式:

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

2,数组的包括数据类型

  • 数值型
  • 字符型
  • 混合型数值加字符

使用" "或' '定义单引号或双引号括起来

(三)定义关联数组

1,定义关联数组方法

2,使用关联数组前先声明

declare -a 声明普通属组 -A声明关联数组

普通属组可以不声明

3,声明后再使用关联数组

4,用来追加或者 修改原来的值

(四)数组介绍  与示例

1,基本介绍

2,获取 数组长度

!显示索引

3,数组中  追加变量

4,数组切片

从第三个开始 取两个

从第三个开始取

5,数组替换

不是真换,临时的

6, 数组删除

删除后,对应的索引也会删

7,取数组中最大值和最小值

8,冒泡排序

8.1 冒泡排序含义

数组排序算法:日泡排序类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

基本思想,冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面 (也就是交换两个元素的位置》,这样较小的元素就像气泡一样从底部上升到顶部。

算法思路冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,此时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置对比和交换次数随排序轮数而减少。

8.2 实验

排序后arr数组值为

相关文章
|
8天前
|
Shell 开发者
Shell 函数深入解析与实践
了解 Shell 函数的基础,包括定义、参数传递及返回值。函数定义有多种语法,如 `function func() {...}` 或 `func() {...}`。参数通过 `$1`, `$2` 等访问,`$@` 代表所有参数。`return` 用于返回退出状态码(0-255),非数值数据需用 `echo`。正确获取函数返回值应立即检查 `$?`,例如:`result=$?`。实践中不断探索和学习!
10 1
|
10天前
|
监控 Shell Linux
Linux的Shell脚本详解
Linux的Shell脚本详解
|
14天前
|
Shell
shell脚本
shell脚本
16 2
|
22天前
|
Ubuntu Java Linux
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
33 2
|
22天前
|
Shell Linux
shell linux中shell脚本编写俄罗斯方块
shell linux中shell脚本编写俄罗斯方块
21 1
|
23天前
|
Shell Linux Perl
Linux shell脚本sed使用
Linux shell脚本sed使用
15 1
|
3天前
|
Shell
Shell脚本之条件语句if总结
Shell脚本之条件语句if总结
|
13天前
|
存储 Shell 开发者
Shell 数组:灵活操作的秘诀
**Shell 数组简介**:作为基础数据结构,数组在Shell编程中不可或缺。它们存储多个值,下标从0开始。创建如`array=(值1 值2...)`,访问用`${array[index]}`。增删改查及获取长度、拼接数组都有相应语法,例如`unset array[index]`删除元素,`${#array[@]}`获取长度。通过实践这些操作,提升Shell脚本技能。
5 0
|
22天前
|
Ubuntu Shell Linux
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
14 0
|
22天前
|
监控 Shell Linux
shell linux中用shell写一个占用CPU的脚本
shell linux中用shell写一个占用CPU的脚本
23 0