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

课时93:流程控制_函数进阶_综合练习

1.1.3 综合练习

学习目标

这一节,我们从 案例解读、脚本实践、小结 三个方面来学习。

案例解读

案例需求

使用shell脚本绘制一个杨辉三角

在这里插入图片描述

案例解读

在这里插入图片描述

1、每行数字左右对称,从1开始变大,然后变小为1。   
2、第n行的数字个数为n个,所有数字和为 2^(n-1)。  
3、每个数字等于上一行的左右临近两个数字之和。
4、第n行的数字依次为 1、1×(n-1)、1×(n-1)×(n-2)/2、1×(n-1)×(n-2)/(n-3)/3 ...   
...

脚本实践

脚本实践

查看脚本内容
[root@localhost ~]# cat yanghui_triangle.sh
#!/bin/bash
# 功能:shell定制杨辉三角功能
# 版本:v0.1
# 作者:书记
# 联系:www.superopsmsb.com# 判断输入是否为整数
check_int(){# 设定数据标识flag=trueread -p "请输入一个数据值: " layer_num# 通过在循环内部进行数据操作判断是否是数据while $flag;doexpr $layer_num + 0 > /dev/null 2>&1if [ $? -eq 0 ]thenflag=falseelseread -p "请输入一个数据值: " layer_numfidone
}# 定制一个数组
declare -a num_arraycheck_int
# 定制杨辉三角的行数变量 row
for(( row=1; row<=layer_num; row++ ))
do#打印杨辉三角的左侧空白for k in $(seq $[$layer_num - $row])doecho -n "    "done# 定制每行的数据获取for(( col=1; col<=row; col++ ))do# 第n行的第1个和第n行的第n个数字为1if [ $col -eq 1  -o $row -eq $col ]then# 设定每行的两个边界数字为1num_array[$row$col]=1else# 获取上一行的两个临近数据let row_up=row-1  # 获取上一行的数据let col_up=col-1  # 获取上一行的临近数据# 获取当前行的数据值为 上一行临近数据的数据和let num_array[$row$col]=${num_array[$row_up$col_up]}+${num_array[${row_up}${col}]}fidone# 打印每行的数据for(( col=1; col<=row; col++ ))doprintf "%-8s" ${num_array[$row$col]}doneecho
done
脚本执行效果
[root@localhost ]# /bin/bash yanghui_triangle.sh
请输入一个数据值: 811       11       2       11       3       3       11       4       6       4       11       5       10      10      5       11       6       15      20      15      6       1
1       7       21      35      35      21      7       1

函数嵌套改造

脚本改造后内容
[root@localhost ~]# cat yanghui_triangle.sh
#!/bin/bash
# 功能:shell定制杨辉三角功能
# 版本:v0.2
# 作者:书记
# 联系:www.superopsmsb.com# 定制一个数组
declare -a num_array# 判断输入是否为整数
check_int(){# 设定数据标识flag=trueread -p "请输入一个数据值(q退出): " layer_num[ $layer_num == "q" ] && exit# 通过在循环内部进行数据操作判断是否是数据while $flag;doexpr $layer_num + 0 > /dev/null 2>&1if [ $? -eq 0 ]thenflag=falseelseread -p "请输入一个数据值: " layer_numfidone
}# 定制左侧空格打印逻辑
left_blank_func(){# 获取参数值layer_num=$1row=$2# 空格打印逻辑for k in $(seq $[$layer_num - $row])doecho -n "    "done
}# 获取每行的数据值
col_num_count(){# 获取参数值row=$1# 数据获取逻辑   for(( col=1; col<=row; col++ ))do# 第n行的第1个和第n行的第n个数字为1if [ $col -eq 1  -o $row -eq $col ]then# 设定每行的两个边界数字为1num_array[$row$col]=1else# 获取上一行的两个临近数据let row_up=row-1  # 获取上一行的数据let col_up=col-1  # 获取上一行的临近数据# 获取当前行的数据值为 上一行临近数据的数据和let num_array[$row$col]=${num_array[$row_up$col_up]}+${num_array[${row_up}${col}]}fidone
}
# 每行数据打印逻辑
col_num_print(){# 获取参数值row=$1# 数据打印逻辑for(( col=1; col<=row; col++ ))doprintf "%-8s" ${num_array[$row$col]}doneecho
}
while true
docheck_int# 定制杨辉三角的行数变量 rawfor(( row=1; row<=layer_num; row++ ))do#打印杨辉三角的左侧空白left_blank_func $layer_num $row# 获取数据的值col_num_count $row# 打印每行的所有数据col_num_print $rowdone
done
[root@localhost ~]# /bin/bash yanghui_triangle.sh
请输入一个数据值(q退出): 511       11       2       11       3       3       1
1       4       6       4       1
请输入一个数据值(q退出): q
[root@localhost ~]#

小结


http://www.lryc.cn/news/337436.html

相关文章:

  • oracle创建整个数据库的只读账户
  • 文件名乱码危机:数据恢复全攻略
  • Unity Standalone File Browser,Unity打开文件选择器
  • 面向对象的架构三段式写一篇论文
  • npm ERR! code CERT_HAS_EXPIREDnpm ERR! errno CERT_HAS_EXPIRED
  • pytorch-多分类实战之手写数字识别
  • httpsok-快速申请谷歌SSL免费证书
  • LiveGBS流媒体平台GB/T28181功能-国标级联中如何自定义通道国标编号编辑通道编号保持唯一性
  • mysql 大表凌晨定时删除数据
  • ArcGIS和ArcGIS Pro快速加载ArcGIS历史影像World Imagery Wayback
  • 数据仓库的—数据仓库的体系架构
  • 【C/C++基础知识】const 关键字
  • Docker之数据卷和Dockerfile
  • pull拉取最新代码
  • 工控 modbusTCP 报文
  • 在Ubuntu服务器上快速安装一个redis并提供远程服务
  • 玩机进阶教程------手机定制机 定制系统 解除系统安装软件限制的一些步骤解析
  • Bilstm双向长短期神经网络多输入单输出回归分析
  • ELK+Filebeat日志分析系统
  • flex吃干抹净
  • 【单片机毕业设计8-基于stm32c8t6的RFID校园门禁系统】
  • uni-app web端使用getUserMedia,摄像头拍照
  • 2024-简单点-观察者模式
  • STM32—DMA直接存储器访问详解
  • 【JavaEE初阶系列】——网络编程 TCP客户端/服务器 程序实现
  • CMake构建OpenCv并导入QT项目过程中出现的问题汇总
  • AcWing 796. 子矩阵的和——算法基础课题解
  • macos 查看 远程服务器是否开放某个端口
  • GraphQL注入
  • 以太坊源码阅读01