shell脚本——第三章 函数与数组

目录

一、函数

1.1 函数的定义

1.2 函数的三种格式

1.3  如何使用函数

1.4 函数的调用

1.5 函数的返回值

1.6 函数的传参数

1.7  函数变量的 作用范围

1.8 函数的递归

例子:阶乘

二、数组

2.1 数组的定义

2.2  数组的使用

2.3 数组的格式

2.4 数组的数据类型

2.5  数组的长度与内容以及如何获取数组下标对应的值

2.6 数组中的应用

1.遍历数组

2.数组的切片

3.数组删除和指定下标的值删除

4.取出最大值与最小值

5.冒泡排序


一、函数

1.1 函数的定义

 函数定义:封装的可重复利用的具有特定功能的代码

1.2 函数的三种格式

1.

function 函数名 { 

命令序列

}

2.

函数名(){

命令序列

}

3.

function func_name () {

...函数体...

}

注意事项

  • 直接写 函数中调用函数 直接写函数名
  • 同名函数 后一个生效
  • 调用函数一定要先定义
  • 只要先定义了调用的 其他函数定义顺序无关 

1.3  如何使用函数

1.定义

2.使用

准备一个只存函数的文件

函数一定要先定义 后使用

1.4 函数的调用

例子:查看当前操作系统的版本

#定义函数
#!/bin/bash
os (){
if grep -iq centos /etc/os-release
then echo "该系统是centos"

elif grep -iq ubuntu /etc/os-release
then echo "该系统是ubuntu"

else
echo "该系统既不是centos 也不是ubuntu"
fi
}

#调用函数
os

1.5 函数的返回值

如果 使用函数 那么 $? 使用就会受限

我们可以使用 return 自定义 $? 的返回值,来判断 函数中的 命令是否成功

使用原则:
函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码

退出状态码必须是0~255,超出时值将为除以256取余

解决大于255的方法:

1.6 函数的传参数

例子:

#!/bin/bash
sum1(){
echo $1
echo $2
}

sum1 $2 $1

1.7  函数变量的 作用范围

加 local关键字 可以让变量只在函数中生效,不会影响外界环境

#!/bin/bash
fun(){

 local i=10
 echo $i
}

i=25
fun
echo $i  

1.8 函数的递归

函数调用自己本身的函数

例子:阶乘

#!/bin/bash
fact () {
   if [ $1 -eq 1 ]
   then
   echo 1
   else
   echo $[$1*`fact $[$1-1]`]
   fi
}
fact $1

二、数组

2.1 数组的定义

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

数组名和索引

  • 索引的编号从0开始,属于数值索引

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

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

2.2  数组的使用

注:一定要先声明数组

declare -a 普通数组(不需要手动声明)

关联数组一定要手动声明

declare -A   数组名

2.3 数组的格式

  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.4 数组的数据类型

  • 数值型
  • 字符型
  • 混合型数值加字符
  • 使用" "或' '定义单引号或双引号括起来

2.5  数组的长度与内容以及如何获取数组下标对应的值

长度:

echo ${#数组名[*]}

echo ${#数组名[@]}

内容:

echo ${数组名[*]}

echo ${数组名[@]}

获取下标对应的值:

数组名=(元素0  元素1  元素2  ……)                    #定义数组
echo ${数组名[索引值]}                           # 输出数组索引值对应的元素,索引值为从0开始

2.6 数组中的应用

1.遍历数组

#!/bin/bash
a=(1 2 4 6 7 8 10)
for i in ${a[@]}
do
  echo $i
done

2.数组的切片

${数组名[@]:offset:number}

offset #要跳过的元素个数
number #要取出的元素个数

3.数组删除和指定下标的值删除

#删除整个数组
unset 数组名
 
#删除指定下标的值
unset 数组名[数组下标]

4.取出最大值与最小值

#!/bin/bash

for i in {0..9}
do
  a[$i]=$RANDOM
  [ $i  -eq 0 ]&& min=${a[0]} &&max=${a[0]}
  [ ${a[$i]} -gt $max ]&& max=${a[$i]}
  [ ${a[$i]} -lt $min ]&& min=${a[$i]}
done

echo "数组所有值为 ${a[@]}"

echo "最大值是:$max"
echo "最小值是:$min"

5.冒泡排序

#!/bin/bash
#生成一个随机数组

for  i  in {0..9}
do
  a[$i]=$RANDOM
done

echo "原始数组为: ${a[@]}"

l=${#a[@]}
#定义变量l(L)为数组a的长度10
for((i=1;i<$l;i++))
#需要比较的轮次   
do
   for ((j=0;j<$l-$i;j++))
   #相邻的数需 要比较的次数
   do
   first=${a[$j]}
   #数组的第一个数  
   k=$[$j+1]
   #计算数组 下一个数的 下标   
   second=${a[$k]}
   #下一个数
   if [ $first  -gt  $second ]
   then
   temp=$first
   a[$j]=$second 
   a[$k]=$temp
   fi
   done
done

echo "排序后的数组:  ${a[@]}"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值