1.1.2 函数自调用
这一节,我们从 简单实践、案例实践、小结 三个方面来学习。
简单实践
简介
函数自调用也称函数递归,说白了就是 函数调用自身,实现数据递归能力的实现
实践-函数自调用
需求: 实现数学阶乘的实践
示例:5的阶乘
完整格式:5! = 1 * 2 * 3 * 4 * 5 = 120
简写格式:5! = 5 * (1 * 2 * 3 * 4) = 5 * 4!
公式: x! = x * (x-1)!
查看脚本内容
[root@localhost ~]# cat function_func_test1.sh
#!/bin/bash
# 功能:函数自调用实践
# 定制功能函数框架
self_func(){
# 接收一个参数
num=$1
if [ ${num} -eq 1 ];then
echo 1
else
# 定制一个临时本地变量,获取递减后的值
local temp=$[ ${num} - 1 ]
# 使用函数自调用方式获取内容
local result=$(self_func $temp)
# 格式化输出信息
echo $[ $result * ${num} ]
fi
}
# 检测逻辑效果
while true
do
read -p "请输入一个您要查询的阶乘:" value
result=$(self_func ${value})
echo "${value}的阶乘是: ${result}"
done
脚本执行效果
[root@localhost ~]# /bin/bash function_func_test1.sh
请输入一个您要查询的阶乘:5
5的阶乘是: 120
请输入一个您要查询的阶乘:6
6的阶乘是: 720
请输入一个您要查询的阶乘:7
7的阶乘是: 5040
请输入一个您要查询的阶乘:^C
[root@localhost ~]#
案例实践
实践1-遍历制定目录下的所有文件
准备工作
[root@localhost ~]# mkdir -p dir/{softs/{nginx,tomcat},logs,server/{java,python}}
[root@localhost ~]# touch dir/softs/{nginx/nginx.conf,tomcat/server.xml}
[root@localhost ~]# touch dir/logs/user{1..3}.log
[root@localhost ~]# touch dir/server/{java/java.jar,python/python.py}
[root@localhost ~]# tree dir/
dir/
├── logs
│ ├── user1.log
│ ├── user2.log
│ └── user3.log
├── server
│ ├── java
│ │ └── java.jar
│ └── python
│ └── python.py
└── softs
├── nginx
│ └── nginx.conf
└── tomcat
└── server.xml
7 directories, 7 files
[root@localhost ~]# cat function_scan_dir.sh
#!/bin/bash
# 功能:扫描目录下所有文件
# 版本:v0.1
# 作者:书记
# 定制功能函数框架
# 定制目录扫描功能函数
scan_dir() {
# 定制临时局部功能变量
# cur_dir 当前目录 workdir 工作目录
local cur_dir workdir
# 接收要检查的目录,进入到目录中
workdir=$1
cd ${workdir}
# 对工作目录进行简单判断,根目录没有父目录
if [ ${workdir} = "/" ]
then
cur_dir=""
else
cur_dir=$(pwd)
fi
# 查看当前目录下的文件列表
for item in $(ls ${cur_dir})
do
# 如果文件是目录,则继续查看目录下文件
if test -d ${item};then
cd ${item}
scandir ${cur_dir}/${item}
cd ..
# 如果文件是普通文件,则输出信息即可
else
echo ${cur_dir}/${item}
fi
done
}
# 检测逻辑效果
while true
do
read -p "请输入一个您要查询的目录:" value
if [ -d ${value} ]
then
scandir ${value}
else
echo "您输入的不是目录,请重新输入!"
fi
done
脚本执行效果
[root@localhost ~]# /bin/bash function_scan_dir.sh
请输入一个您要查询的目录:dir
/root/dir/logs/user1.log
/root/dir/logs/user2.log
/root/dir/logs/user3.log
/root/dir/server/java/java.jar
/root/dir/server/python/python.py
/root/dir/softs/nginx/nginx.conf
/root/dir/softs/tomcat/server.xml
请输入一个您要查询的目录:^C
[root@localhost ~]#
结果显示:
该脚本达到了我们需要的目录遍历效果