Shell函数&数组

目录

一、shell函数定义

二、函数基本格式

三、函数返回值

四、函数应用示例

1.函数调用

2.调用函数安装本地yum源

 3、函数的作用范围    

4. 函数的参数

5. 函数的递归

五、shell数组

1.定义数组

2.获取数组长度

3.元素切片

 4.元素替换

 5.元素删除

 6.冒泡排序



一、shell函数定义

  • 将命令序列按格式写在一起
  • 可方便重复使用命令序列

二、函数基本格式

[function] 函数名(){
  命令序列
[return x]                           #使用return或exit可以显示的结束函数 
}
 
 
或者
 
                                     #也可以省略掉[function],它表示该函数的功能
 
函数名() {                            #函数名后面()是没有内容的
  命令序列                            #我们执行的命令内容放在{}里面
}

        函数定义完之后并不会自动执行,需要调用才行

        好处在于可以写一段功能代码作为函数,有需要就直接调用定义的时候哪怕出现语法错误也没关系,不调用就不会报错

        当然我们写函数最终目的还是为了调用,为了实现某个功能块。

三、函数返回值

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

  • 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
  • 退出状态码必须是0~255,超出时值将为256取余

四、函数应用示例

1.函数调用

遇到重名时只执行最后一个

 一起执行

2.调用函数安装本地yum源

 3、函数的作用范围    

        在Shell 脚本中函数的执行并不会开启一个新的子Shell,而是仅在当前定义的Shell 环境中有效。如果Shell脚本中的变量没有经过特殊设定,默认在整个脚本中都是有效的。在编写脚本时,有时需要将变量的值限定在函数内部,可以通过内置命令local 来实现。函数内部变量的使用,可以避免函数内外同时出现同名变量对脚本结果的影响

        函数内部使用local 命令设置变量a,其作用是将变量a限定在函数内部。函数外部同样定义了变量a,内部变量a和全局变量a互不影响。脚本执行时先调用了函数,函数内部变量a为5,所以输出结果是1。调用完函数之后,给变量a赋值为2,再打印外部变量a,所以又输出2.

4. 函数的参数

         参数的用法

               函数名称 参数1 参数2 参数3...

          参数的表示方法
                $1 $2 $3 ......${10} ${11}......

1.调用函数时传入两个参数

2.用户输入两个参数

5. 函数的递归

        Shell 也可以实现递归函数,就是可以调用自己本身的函数。在Linux系统上编写Shell 脚本的时候,经常需要递归遍历系统的木,列出目录下的文件和河路,逐层递归列出,并对这些层级关系进行展示。

函数递归实现阶乘计算

列出目录内文件列表,目录用蓝色表示,文件显示层级关系

五、shell数组

1.定义数组

可以在单行中使用数值列表来定义一个数组

        array_var=(test1 test2 test3 test4)
        #这些值将会存储在以0为起始索引的连续位置上
    或者
        #将数组定义为一组“索引—值”
        array_var[0]="test1"
        array_var[1]="test2"
        array_var[2]="test3"
        array_var[3]="test4"


精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续

        num=([0]=55 [1]=66 [2]=77 [4]=88)
        数组名=([0]=value [1]=value [2]=value. . .)

 

先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组

        list="11 12 13 14"
        num=($list)

 

2.获取数组长度

${#a}显示字符串长度

以列表形式打印出数组中的所有值
在数组中,@和*的效果一样

数组元素的遍历

3.元素切片

 4.元素替换

 5.元素删除

 6.冒泡排序

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

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

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

score=(77 13 91 56 88)

两两对比,第1个和第2个比,小的值到前面,大的值到后面。
以此类推。第2个和第3个比,第3个和第4个比,第4个和第5个比

------------第一轮------------
77 13 91 56 88 第一次对比 数组长度-1 第一轮比较往后值, 最大值为91 
13 77 91 56 88 第二次对比 
13 77 91 56 88 第三次对比 
13 77 56 91 88 第四次对比 
13 77 56 88 91
------------第二轮------------
13 77 56 88 91 第一次对比 数组长度-1第二轮比较往后,第二大的数字88 
13 77 56 88 91 第二次对比 
13 56 77 88 91 第三次对比 
13 56 77 88 91
------------第三轮-----------
13 56 77 88 91 第一次对比 数组长度-1第三轮比较往后,第三大的数字77 
13 56 77 88 91 第二次对比 
13 56 77 88 91
------------第四轮-----------
13 56 77 88 91 第一次对比 数组长度-1第四轮比较往后,第四大的数字56 
13 56 77 88 91

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值