shell脚本的函数或数组

函数

函数的数学表达式      

sin   cos   tan     其实就是定义好了计算公式  函数就是一个功能模块,在函数中写好执行的命令即可

使用函数可以避免代码重复,增加可读性, 简化脚本

使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强

函数使用方法:

1. 定义函数

2. 再引用函数

基本格式

1.

function 函数名{

​                        命令序列

}

2.

函数名(){

命令序列

}

3.

function func_name () {

 ...函数体...

}

注意事项

1. 直接写 函数中调用函数 直接写函数名

2. 同名函数 后一个生效

3. 调用函数一定要先定义

4. 每个函数是独立

关于declare查询的用法

【查看函数列表】

declare -F

#查看当前已定义的函数名,仅仅显示名称

declare -f

#查看当前已定义的函数定义,包含脚本代码

 declare -f 函数名称

#查看该函数是否存在(这里必须是已经用source或者.已经声明过的函数内容,要不然系统无法识别)

 declare -F 函数名称

#查看当前已定义的函数,以及详细代码

 unset 函数名

#表明从系统中删除定义的函数,但是如果函数脚本使用source再次声明,还是会存在的

判断操作系统版本:

函数的返回值return

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

使用原则:

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

怎么解决超过255

因为return的返回值的范围是0-255,超过部分除以256取余,得不到我们想要的结果,此时可以直接在函数体中使用echo命令。

函数的传参数

函数变量的作用范围:

函数在shell脚本中仅在当前的shell环境中有效

shell脚本中函数的变量默认全局有效

将变量限定在函数内部使用local命令

函数递归

函数调用自己本身的函数

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

示例:计算5的阶乘

for循环编写:

函数编写:

数组

数组的分类

普通数组

下标索引是从0开始的数字,下标数字是可以不连续的

普通数组是系统会自动进行声明的

bash a.sh不会变成当前系统的数组

source a.sh这是可以变为当前bash环境的数组,自动声明

关联数组

数组名和索引:

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

声明数组

#普通数组可以不事先声明,直接使用

declare  -a  ARRAY_NAME

#关联数组必须先声明,再使用

declare  -A  ARRAY_NAME

数组定义方法

方法一(一次赋值全部元素):

数组名=(value0 value1 value2 ...)

a=(10 20 30 40 50)

方法二(只赋值特定元素):

数组名=([0]=value [1]=value [2]=value ...)

b=([0]=10 [1]=20 [2]=30)

方法三:

列表名="value0 value1 value2 ..."

数组名=($列表名)

方法四(一次只赋值一个元素):

数组名[0]="value"

数组名[1]="value"

数组名[2]="value"

定义数组

方法有5种,常用的是这两种

1.总体赋值

2.单个赋值

调用数组以及给数组赋值

获取数组长度

获取数组的所有信息

数组切片

echo ${数组名[@]:n:m}表示跳过前n个,只看m个,如果没有m则是后面所有

给某个数组原有的值重新赋值

数组名[标号]=新的值

取出数组中的最大值和最小值

删除数组

unset 数组名称

总结:

函数总结:

1、先定义函数

2、调用函数(注意:若定义完成不调用则函数无效),在命令行调用需要使用source和.来执行函数脚本申明

3、查看系统的所有函数名称:declare -F (如果函数脚本没有用source,那么在系统中查不到)

4、查看函数定义详细内容:declare -f  函数名称

5、删除函数格式:unset  函数名称

6、函数中的变量注意,根据使用可以加上local为局部变量,只在执行函数时生效

数组总结:

1、关联数组需要先声明,即使在脚本中也需要使用(declare -A 数组名)来进行声明,否则无效

2、查询系统中的所有普通数组为declare -a ;查询所有关联数组为:declare -A

3、查询数组内容:echo ${数组名[*]}、${数组名[@]}

4、删除数组格式:unset 数组名;删除单个数组内容:unset 数组名[下标]

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值