1 流程控制
1.1 函数进阶
1.1.1 函数嵌套
基础知识
简介
所谓的函数嵌套,主要是在函数间或者文件间相互使用的一种方式。它主要有三种样式:
样式1:函数间调用
- 函数体内部调用其他的函数名
样式2:文件间调用
- 函数体内部调用另外一个文件的函数名
- 需要额外做一步文件source的加载动作
注意:我们将专门提供函数的文件称为 -- 函数库
样式3:函数自调用
- 函数体内部调用自己的函数名,将复杂的逻辑简单化
简单实践
函数间调用实践1-图形信息打印
按照信息提示,分别打印 三角形 和 等腰梯形
* *****
* * *******
* * * *********
* * * * ***********
* * * * * *************
[root@localhost ~]# cat function_drawn_graph.sh
#!/bin/bash
# 功能:打印相关图形
# 版本:v0.2
# 作者:书记
# 联系:www.superopsmsb.com
graph_type=(三角形 梯形)
# 定制服务的操作提示功能函数
menu(){
echo -e "\e[31m---------------查看可以绘制的图形---------------"
echo -e " 1: 三角形 2: 梯形"
echo -e "-------------------------------------------\033[0m"
}
# 定制打印左侧空格效果
left_bland_func(){
layer_num="$1"
sub_num="$2"
for m in $(seq $[${
layer_num}-${
sub_num}]);do
echo -n " "
done
}
# 打印图形的核心内容部分
kernel_character_func(){
char_num="$1"
char_mark="$2"
for j in $(seq ${
char_num});do
echo -n "${char_mark}"
done
}
# 定制打印三角形的函数
triangle_func(){
# 接收函数传参
layer_num=$1
# 定制打印n层的三角形
for i in $(seq 1 ${
layer_num});do
# 定制打印三角形左侧的空格效果
left_bland_func ${
layer_num} $i
# 定制打印三角形核心部分
kernel_character_func $i "* "
# 打印完每行就换行
echo
done
}
# 定制梯形的功能函数
trapezium_func(){
print_num=${
layer_num}
for i in $(seq 1 ${
layer_num});do
# 定制打印梯形左侧的空格效果
left_bland_func ${
layer_num} $i
# 定制打印梯形核心部分
kernel_character_func $print_num "*"
let print_num+=2
echo
done
}
# 选择服务操作类型
while true;do
menu
read -p "> 请输入要查看的资源信息类型: " graph_id
case ${
graph_type[$graph_id-1]} in
"三角形")
read -p "> 请输入三角形绘制的层数: " layer_num
triangle_func ${
layer_num}
;;
"梯形")
read -p "> 请输入梯形绘制的层数: " layer_num
# 定制打印n层的梯形
trapezium_func ${
layer_num}
;;
*)
echo -e "\e[31m\t请输入正确的绘图类型id\e[0m";;
esac
done
脚本执行后效果
[root@localhost ~]# /bin/bash function_drawn_graph.sh
---------------查看可以绘制的图形---------------
1: 三角形 2: 梯形
-------------------------------------------
> 请输入要查看的资源信息类型: 1
> 请输入三角形绘制的层数: 5
*
* *
* * *
* * * *
* * * * *
---------------查看可以绘制的图形---------------
1: 三角形 2: 梯形
-------------------------------------------
> 请输入要查看的资源信息类型: 2
> 请输入梯形绘制的层数: 5
*****
*******
*********
***********
*************
---------------查看可以绘制的图形---------------
1: 三角形 2: 梯形
-------------------------------------------
> 请输入要查看的资源信息类型: ^C
[root@localhost ~]#
文件间调用实践2-拆分function_drawn_graph.sh脚本
需求:拆分绘图脚本文件
1 将脚本文件中的功能逻辑函数拆分出来以单独的文件存在
2 脚本文件保留核心逻辑功能
创建功能函数库文件目录
[root@localhost ~]# mkdir lib
查看库文件内容
[root@localhost ~]# cat lib/drawn_func.sh
#!/bin/bash
# 功能:打印相关图形功能函数库
# 版本:v0.1
# 作者:书记
# 联系:www.superopsmsb.com
# 定制服务的操作提示功能函数
menu(){
echo -e "\e[31m---------------查看可以绘制的图形---------------"
echo -e " 1: 三角形 2: 梯形"
echo -e "-------------------------------------------\033[0m"
}
# 定制打印三角形左侧空格效果
left_bland_func(){
layer_num="$1"
sub_num="$2"
for m in $(seq $[${
layer_num}-${
sub_num}]);do
echo -n " "
done
}
# 打印图形的核心内容部分
kernel_character_func(){
char_num="$1"
char_mark="$2"
for j in $(seq ${
char_num});do
echo -n "${char_mark}"
done
}
# 定制打印三角形的函数
triangle_func(){
# 接收函数传参
layer_num=$1
# 定制打印n层的三角形
for i in $(seq 1 ${
layer_num});do
# 定制打印三角形左侧的空格效果
left_bland_func ${
layer_num} $i
# 定制打印三角形核心部分
kernel_character_func $i "* "
# 打印完每行就换行
echo
done
}
# 定制梯形的功能函数
trapezium_func(){
print_num=${
layer_num}
for i in $(seq 1 ${
layer_num});do
# 定制打印梯形左侧的空格效果
left_bland_func ${
layer_num} $i
# 定制打印梯形核心部分
kernel_character_func $print_num "*"
let print_num+=2
echo
done
}
查看脚本框架文件
[root@localhost ~]# cat function_drawn_graph-lib.sh
#!/bin/bash
# 功能:打印相关图形
# 版本:v0.3
# 作者:书记
# 联系:www.superopsmsb.com
# 定制数组变量
graph_type=(三角形 梯形)
# 加载功能函数库文件
source ./lib/drawn_func.sh
# 选择服务操作类型
while true;do
menu
read -p "> 请输入要查看的资源信息类型: " graph_id
case ${
graph_type[$graph_id-1]} in
"三角形")
read -p "> 请输入三角形绘制的层数: " layer_num
triangle_func ${
layer_num}
;;
"梯形")
read -p "> 请输入梯形绘制的层数: " layer_num
# 定制打印n层的梯形
trapezium_func ${
layer_num}
;;
*)
echo -e "\e[31m\t请输入正确的绘图类型id\e[0m";;
esac
done
脚本执行效果
[root@localhost ~]# /bin/bash function_drawn_graph-lib.sh
---------------查看可以绘制的图形---------------
1: 三角形 2: 梯形
----