shell函数及数组

函数

函数的用法

Shell 函数可用于存放一系列的指令。将一些相对独立的代码变成函数,可以提高程序可读性与重用性,避免编写大量重复代码。
在这里插入图片描述
“function”关键字表示定义一个函数,可以省略;
“{”符号表示函数执行命令的入口,该符号可以与函数名同行也可以在函数名下一行 的句首;
“}”符号表示函数体结束,两个大括号之间{ }是函数体;
“命令序列”部分可以是任意的 Shell 命令,也可以调用其他函数;
“return”表示退出函数返回一个退出值,通过返回值判断执行是否成功,也可以使用 exit 终止整个 Shell 脚本。

函数的调用

下面的例子定义了一个函数并进行调用:

#!/bin/bash

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

输出结果:

-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

函数变量的作用范围

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

函数的参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

递归函数

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

function list_files()
{
for f in `ls $1`; do
if [ -d "$1/$f" ]; then echo "$2$f"
list_files "$1/$f" "	$2"
done
}
else fi
echo "$2$f"
list_files "/var/log" ""

数组

数组是一种常见的数据结构,主要的应用场景包括:获取数组长度、获取元素长度、遍历元素、元素切片、元素替换、元素删除等等。
在这里插入图片描述

数组的基本使用方法

获取数组长度

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

读取某个赋值

[root@localhost ~]# b=${a[2]}
[root@localhost ~]# echo $b
3
##从0开始,2代表第三个数

数组遍历

[root@localhost opt]# vim test.sh
#!/bin/bash
z=(1 2 3 4 5)
for y in ${z[@]}
do
echo $y
done
[root@localhost opt]# chmod +x test.sh 
[root@localhost opt]# ./test.sh 
1
2
3
4
5

数组切片

[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost opt]# echo ${a[@]}
1 2 3 4 5
[root@localhost opt]# echo ${a[@]:0:2} ##从第一个开始输出两个
1 2
[root@localhost opt]# echo ${a[@]:2:3} ##从第三个开始输出三个
3 4 5

数组替换

[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost opt]# echo ${a[@]/4/66} ##将数字4换成66输出
1 2 3 66 5
[root@localhost opt]# echo ${a[@]} ##但是并不会改变原数组
1 2 3 4 5

数组删除

[root@localhost opt]# echo ${a[@]}
1 2 3 4 5
[root@localhost opt]# unset a ##删除整个数组
[root@localhost opt]# echo ${a[@]}

[root@localhost opt]# a=(1 2 3 4 5)
[root@localhost opt]# unset a[2]  ##删除第三个数字
[root@localhost opt]# echo ${a[@]}
1 2 4 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值