shell 函数与数组

目录

1. 函数

1.1 函数的格式及调用

1.2 函数的返回值

1.3 函数的参数

1.4 函数的变量作用范围

1.5 函数的递归

2. 数组

2.1 数组的定义

2.2 数组的使用

2.3 有关数组的操作

2.3.1 数组切片

2.3.2 数组遍历

2.3.3 数组删除

2.3.4 数组追加

2.3.5 数组替换

1. 函数

Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。

1.1 函数的格式及调用

1.标准版

function name () {        //函数名
    commands              //函数内容
    [return]                //返回值 
}

2.简化版

name(){             //函数名
    commands         //函数内容
    [return]         //返回值

}

我们一般使用下面的方法,进行函数的定义。当我们需要调用函数时,我们可以根据函数的内容来选择带参数和不带参数。

name
name 参数1  参数2

打印hello

shell 函数与数组_第1张图片

1.2 函数的返回值

函数的返回值,即函数功能完成之后传回主函数的值。

retrun  

shell 函数与数组_第2张图片

 但是return只能返回0-255之内的数字,如果返回值超过了这个范围,最后显示的结果则是数值除以256取余。

1.3 函数的参数

和c,java,c++等大部分编程语言不同,Shell 中的函数在定义时不能指明参数,但是在调用时却可以传递参数。

函数的参数时shell位置变量的一种,在函数中使用“$n”的方式来接收,从$1开始,依次递增n的值。

当然,函数中也可以使用预定义变量

shell 函数与数组_第3张图片

要注意的是,函数的参数和主体中的参数只有位置上的对应关系,没有名称的对应关系。 

1.4 函数的变量作用范围

一般来说,在shell脚本中定义的变量,他的作用范围仅限于shell脚本内,退出当前的bash环境,该变量就会失效。同样的,为了区分函数和主体部分的变量,我们可以将变量的作用范围限制在函数中即:

local  变量名

shell 函数与数组_第4张图片

1.5 函数的递归

函数的递归,即函数调用自身来完成某些功能,如阶乘的计算,或目录有关的操作

我们以阶乘的计算为例

#!/bin/bash
fun () {
#判断输入的值是否是0或1,如果是直接输出1,不是进行递归
if [ $1 -eq 0  -o  $1 -eq 1 ]
then
   echo 1
else
#递归操作
echo $[$1* $(fact $[$1-1])]
fi
}
fun $1     

2. 数组

和其他编程语言一样,Shell 也支持数组。数组(Array)是若干数据的集合,其中的每一份数据都称为元素。

Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。和大部分语言类似,Shell 数组元素的下标也是从 0 开始计数。

获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。

2.1 数组的定义

shell中,数组用()来表示,数组内的元素用空格来分割

定义的格式

法1

array=(e1 e2 e3 .... en)

法 2

array=([0]=value0 [1]=value0 [2]=value0 ...)
使用这种方法给单独的下标赋值

如
array=([1]=1 [5]=5 [9]=9 ...)

 法 3

arry[0]=1
arry[5]=5
和法2类似,单独为数组某一下标赋值

2.2 数组的使用

当我们想要使用数组时,可以直接使用数组名进行输出

 也可以单独显示数组的某一个元素

 

2.3 有关数组的操作

2.3.1 数组切片

数组的切片就是提取出数组中的一部分元素

格式

${数组名:切片开始下标:切片连续个数}

2.3.2 数组遍历

在脚本中,如需要对数组中的每个元素进行单独的处理,我们可以使用循环结构来进行

shell 函数与数组_第5张图片

2.3.3 数组删除

删除不用的数组

unset 数组名

也可以删除单独的元素

unset 数组名[下标]

2.3.4 数组追加

当我们原本定义的数组不能满足我们的需求时,我们需要追加数组

法1

直接在数组最后追加
arr[原数组最后下标+1]=追加值

shell 函数与数组_第6张图片

 法2

数组名[${#数组名[@]}]=追加值

 法3

数组名+=(元素1 元素2 ...)

 

2.3.5 数组替换

替换数组中某一个元素,但是不会真正改变数组的值

${数组名[@]/旧字符/新字符}

你可能感兴趣的:(linux)