当前位置: 首页 > news >正文

shell脚本编程实践(五)

1 流程控制

1.1 函数进阶

1.1.1 函数嵌套

基础知识

简介

    所谓的函数嵌套,主要是在函数间或者文件间相互使用的一种方式。它主要有三种样式:
样式1:函数间调用- 函数体内部调用其他的函数名
样式2:文件间调用- 函数体内部调用另外一个文件的函数名- 需要额外做一步文件source的加载动作注意:我们将专门提供函数的文件称为 -- 函数库
样式3:函数自调用- 函数体内部调用自己的函数名,将复杂的逻辑简单化

简单实践

函数间调用实践1-图形信息打印

    按照信息提示,分别打印 三角形 和 等腰梯形*                  ****** *                ******** * *              ********** * * *            ************ * * * *          *************
[root@localhost ~]# cat function_drawn_graph.sh
#!/bin/bash
# 功能:打印相关图形
# 版本:v0.2
# 作者:书记
# 联系:www.superopsmsb.comgraph_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}]);doecho -n " "done
}# 打印图形的核心内容部分
kernel_character_func(){char_num="$1"char_mark="$2"for j in $(seq ${char_num});doecho -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 "* "# 打印完每行就换行echodone
}
# 定制梯形的功能函数
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+=2echodone
}
# 选择服务操作类型
while true;domenuread -p "> 请输入要查看的资源信息类型: " graph_idcase ${graph_type[$graph_id-1]} in"三角形")read -p "> 请输入三角形绘制的层数: " layer_numtriangle_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}]);doecho -n " "done
}# 打印图形的核心内容部分
kernel_character_func(){char_num="$1"char_mark="$2"for j in $(seq ${char_num});doecho -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 "* "# 打印完每行就换行echodone
}
# 定制梯形的功能函数
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+=2echodone
}
查看脚本框架文件
[root@localhost ~]# cat function_drawn_graph-lib.sh
#!/bin/bash
# 功能:打印相关图形
# 版本:v0.3
# 作者:书记
# 联系:www.superopsmsb.com# 定制数组变量
graph_type=(三角形 梯形)# 加载功能函数库文件
source ./lib/drawn_func.sh# 选择服务操作类型
while true;domenuread -p "> 请输入要查看的资源信息类型: " graph_idcase ${graph_type[$graph_id-1]} in"三角形")read -p "> 请输入三角形绘制的层数: " layer_numtriangle_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: 梯形
----

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 刷完Armbian的盒子后根目录空间太小解决方案
  • 高阶数据结构——LRU Cache
  • pod详解 list-watch机制 预选优选策略 如何指定节点调度pod
  • 10.1 使用ansible部署 redis-exporter
  • Python 机器学习求解 PDE 学习项目 基础知识(3)matplotlib 画函数热图
  • 十六、【Python】基础教程 - 【Flask】网络编程开发
  • SpringBoot可以同时处理多少请求?
  • WHAT - xmlhttprequest vs fetch vs wretch
  • YOLO系列:从yolov1至yolov8的进阶之路 持续更新中
  • 【数据结构】队列,你必须知道的内部原理!!!
  • 大数据Flink(一百零九):阿里云Flink的基本名称概念
  • 保障速度与安全合规的前提下,如何传文件到国外?
  • 【解压既玩】PS3模拟器v0.0.32+战神3+战神升天+各存档 整合包 ,完美不死机,没有BUG,旷世神作,强力推荐
  • AI编程工具合集整理优缺点
  • HarmonyOS Developer之生命周期
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Create React App 使用
  • django开发-定时任务的使用
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Flex布局到底解决了什么问题
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MaxCompute访问TableStore(OTS) 数据
  • ng6--错误信息小结(持续更新)
  • PermissionScope Swift4 兼容问题
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Spring声明式事务管理之一:五大属性分析
  • Vue官网教程学习过程中值得记录的一些事情
  • 阿里云Kubernetes容器服务上体验Knative
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端技术周刊 2019-02-11 Serverless
  • 前端临床手札——文件上传
  • 删除表内多余的重复数据
  • 微信开放平台全网发布【失败】的几点排查方法
  • 用jquery写贪吃蛇
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #1014 : Trie树
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (a /b)*c的值
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • .form文件_一篇文章学会文件上传
  • .mysql secret在哪_MySQL如何使用索引
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET CORE Aws S3 使用
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化