秒懂!!!函数和数组的介绍及其应用

Shell 函数及数组
SHELL函数
函数的用法
基本格式
函数的调用
示例
函数变量的作用范围
示例
函数的参数
递归函数
SHELL 数组
数组定义的方法
数组的基本使用方法:
1.获取数组长度
2.读取某下标赋值
3.数组遍历
4.数组切片
5.数组替换
6.数组删除
SHELL函数
函数的用法

Shell 函数可用于存放一系列的指令。在 Shell 脚本执行的过程中,函数被置于内存中, 每次调用函数时不需要从硬盘读取,因此运行的速度比较快。在 Shell 编程中函数并非是必须的元素,但使用函数可以对程序进行更好的组织。将一些相对独立的代码变成函数,可以提高程序可读性与重用性,避免编写大量重复代码。

基本格式
在这里插入图片描述

“function”关键字表示定义一个函数,可以省略;
“{”符号表示函数执行命令的入口,该符号可以与函数名同行也可以在函数名下一行 的句首;
“}”符号表示函数体结束,两个大括号之间{ }是函数体;
“命令序列”部分可以是任意的 Shell 命令,也可以调用其他函数;
“return”表示退出函数返回一个退出值,通过返回值判断执行是否成功,也可以使用 exit 终止整个 Shell 脚本。

函数的调用
在这里插入图片描述

示例

在这里插入图片描述

#!/bin/bash
su() {
read -p "请输入第一个数:" NUM1 ;read -p "请输入第二个数:" NUM2
echo "你输入的俩个数为:$NUM1$NUM2"
SUM=$((NUM1+NUM2))
echo "俩个数的和为: $SUM"
}
su

函数变量的作用范围
■函数在Shell脚本中仅在当前Shell环境中有效
■Shell脚本中变量默认全局有效
■将变量限定在函数内部使用local命令

示例

#!/bin/bash
myfun() {
   local i
   i=8
   echo $i
}
i=9
myfun
echo $i

[root@localhost ~]# chmod +x si.sh
[root@localhost ~]# ./si.sh
在这里插入图片描述

函数的参数
在使用函数参数时,函数名称在前参数在后,函数名和参数之间用空格分隔,可以有多个参数,参数使用$1、$2、3……的方式表示。以此类推,从第10个参数开始,调用方法为3……的方式表示。以此类推,从第10个参数开始,调用方法为{10},不加大括号无法调用成功。

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

#!/bin/bash
hanshu() {
for f in `ls $1`    //$1指的是函数后的参数1,
do
  if [ -d "$1/$f" ];then    // 判断如果/var/log"是目录
    echo "$2$f"             //$2 指的是空格
    hanshu "$1/$f" " $2"    // 这边就是函数的调用,把所有的目录都扫描出来
 else                      // 否则
 echo "$2$f"               // $f输出出来的就是文件了  
 fi
done

}
hanshu "/var/log" ""    

SHELL 数组
Shell 脚本中,数组是一种常见的数据结构,主要的应用场景包括:获取数组长度、获取元素长度、遍历元素、元素切片、元素替换、元素删除等等。Shell 中的数组与 Java、C、Python 不同,只有一维数组,没有二维数组。数组元素的大小与限制,也不需要事先定义。Shell 数组用括号()来表示,元素用空格分隔,元素的下标与大部分编程语言类似从 0 开始。

数组定义的方法

在这里插入图片描述
数组的基本使用方法:
1.获取数组长度

[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost ~]# b=${#a[*]}  
[root@localhost ~]# echo $b
5
[root@localhost ~]# b=${#a[@]}  
[root@localhost ~]# echo $b
5

以上演示了在获取数组的长度,【】中*号@的效果一样

2.读取某下标赋值

[root@localhost ~]# c=${a[2]}
[root@localhost ~]# echo $c
3

3.数组遍历

#!/bin/bash
a=(1 2 3 4 5)
 for f in ${a[*]}   // 这边要注意一定要以${a[*]}方式把数组拆散,如果直接引用$a的话,系统会试做数组a里面的元素是一个整体,之后echo输出的值会为1
   do
   echo "$f"
done

[root@localhost ~]# chmod +x yang.sh // 给脚本一个执行的权限
[root@localhost ~]# ./yang.sh // 以下是执行的效果
在这里插入图片描述
4.数组切片

[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost ~]# echo ${a[*]}  //输出的整个数组的元素
1 2 3 4 5
[root@localhost ~]# echo ${a[*]:2:3}  // 输出索引对应的元素
3 4 5
[root@localhost ~]# echo ${a[*]:0:2}
1 2

5.数组替换

[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost ~]# echo ${a[*]/2/66}  //${数组名[@或者*]/查找的字符/替换的字符}
1 66 3 4 5

6.数组删除

root@localhost ~]# a=(1 2 3 4 5)
root@localhost ~]# unset a
[root@localhost ~]# echo ${a[*]}
下面是空的,代表元素已经全部删除了 


root@localhost ~]# a=(1 2 3 4 5)  
[root@localhost ~]# unset a[2]  // 这边演示一下删除单个索引对应的元素的值
[root@localhost ~]# echo ${a[*]}
1 2 4 5
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值