本文旨在通过几个经典的图案来练习shell编程,涉及知识点:for循环,大小比较,基本的数学公式计算,echo小技巧。update:2019-10-17 10:13:54

初次绘制

$ for ((l=1;l<=10;l++)); do for ((w=1;w<=l;w++)); do echo -n "*"; done;echo ; done
*
**
***
****
*****
******
*******
********
*********
$ for ((l=1;l<=10;l++)); do for ((w=1;w<=10-l+1;w++)); do echo -n "*"; done;echo ; done
**********
*********
********
*******
******
*****
****
***
**
*

接下来,考虑对“看不见的部分”进行输出。

$ for ((l=1;l<=10;l++)); do for ((w=10;w>=1;w--)); do if [ $w -gt $l ]; then echo -n " ";else echo -n "*"; fi; done;echo ; done
*
**
***
****
*****
******
*******
********
*********
**********
$ for ((l=1;l<=10;l++)); do for ((w=1;w<=10;w++)); do if [ $w -lt $l ]; then echo -n " ";else echo -n "*"; fi; done;echo ; done
**********
*********
********
*******
******
*****
****
***
**
*

数学知识

上面代码很乱很蹩脚是么?其实,数学知识,y/x那条线的斜率为正负1,y<x,或者y>x,两侧要么是*,要么是空。可以把屏幕看成是右转90°的笛卡尔坐标系进行操作。

举个例子

$for ((x=1;x<=6;x++));do for ((y=1;y<=6;y++));do if [ $y -gt $x ]; then echo -n "*";else echo -n " ";fi;done;echo ;done
*****
****
***
**
*

统一化

x1:6

y1:6

循环的任务是铺满屏幕,6x6.

用谁铺满,if来控制。

if y gt 6-x

数学计算问题…

公式加减法,赋值,类型转换

数学计算:

法1.expr 命令后面跟数学公式,但*等特殊符号需转义

法2.在把公式放到$[ ]的括号里面去。内部可以无视空格。

注意:bash shell数学运算符只支持整数运算。z shell(zsh)提供了完整的浮点数算术操作。如果需要在shell脚本中进行浮点数运算,可以考虑看看z shell。

以对角线斜率为-1时举例: 关键在于控制y=6-x+1这个等式两侧,y≥6-x+1表示为$y -ge \([6-\)x+1]

$  for ((x=1;x<=6;x++));do for ((y=1;y<=6;y++));do if [ $y -ge $[6-$x+1] ];then  echo -n "*";else echo -n " ";fi;done;echo "";done
*
**
***
****
*****
******

Todo:

  • if 后面,逻辑或运算,绘制空心等边三角形,并旋转不同角度
  • awk中高级函数用法。对三角函数的支持实现r=a(1-sinθ)。

用shell命令绘制三角形的更多相关文章

  1. Linux OpenGL 实践篇-3 绘制三角形

    本次实践是绘制两个三角形,重点理解顶点数组对象和OpenGL缓存的使用. 顶点数组对象 顶点数组对象负责管理一组顶点属性,顶点属性包括位置.法线.纹理坐标等. OpenGL缓存 OpenGL缓存实质上 ...

  2. 自定义shell命令--闪烁的字母(PIL实现)

    之前看到shell命令行,有人写过漫天下字母的cmatrix,想自己动手用python写一个类似,但是比较有自己风格的shell屏保 大致效果如下: 制作这个的大体思路比较简单: 1.利用python ...

  3. 从0开发3D引擎(九):实现最小的3D程序-“绘制三角形”

    目录 上一篇博文 运行测试截图 需求分析 目标 特性 头脑风暴 确定需求 总体设计 具体实现 新建Engine3D项目 实现上下文 实现_init 实现"获得WebGL上下文" 实 ...

  4. 2.通过QOpenGLWidget绘制三角形

    参考:1.opengl绘制三角形 1.QOpenGLWidget的早先版本 QGLWidget是遗留Qt OpenGL模块的一部分,和其他QGL类一样,应该在新的应用程序中避免使用.相反,从Qt 5. ...

  5. Hadoop Shell命令大全

    hadoop支持命令行操作HDFS文件系统,并且支持shell-like命令与HDFS文件系统交互,对于大多数程序猿/媛来说,shell-like命令行操作都是比较熟悉的,其实这也是Hadoop的极大 ...

  6. Shell命令和流程控制

    Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...

  7. 在程序中执行shell命令

    在linux系统下的操作中我们会经常用到shell命令来进行,一开始学习进程的时候对于shell命令也进行了思考,认为shell命令就是一个进程的外壳,经过了后来的学习对于这一点也有了更多的认识. 用 ...

  8. Linux远程执行Shell命令或脚本

    ## 远程执行shell命令 ssh [user]@[server] '[command]' # eg. ssh root@192.168.1.1 'uptime' ## 远程执行本地shell脚本 ...

  9. HBase基本shell命令

    HBase基本shell命令 以下shell命令都是经过测试,正常展示,若有不足,还望指点! 1.创建表 create ‘表名称’,‘列族名称1’,‘列族名称1’create 'test_M_01', ...

  10. Linux SHELL 命令入门题目答案(一)

    1.如何使用shell 打印 “Hello World!” (1)如果你希望打印 !,那就不要将其放入双引号中,或者你可以通过转义字符转义(2)echo 'hello world!' 使用单引号ech ...

随机推荐

  1. AcWing 3729. 改变数组元素

    给定一个空数组 V 和一个整数数组 a1,a2,-,an. 现在要对数组 V进行 n次操作. 第 i次操作的具体流程如下: 从数组 V尾部插入整数 0.    2.将位于数组 V末尾的 ai 个元素都 ...

  2. Cesium中监听MOUSE_MOVE事件获取经纬度和高度

    有时候在这个圆球上获取精确的经度纬度还不容易,特别是高度 还好在cesium提供了接口,看 let selft = this; const scene = this.viewer.scene; var ...

  3. 【lwip】13-TCP协议分析之源码篇

    前言 上一年就写好了,一直没时间整理出来,现在不整理了,直接放出来. 链接:https://www.cnblogs.com/lizhuming/p/17438682.html TCP RAW接口分析 ...

  4. node版本问题:Error: error:0308010C:digital envelope routines::unsupported

    前言 出现这个错误是因为 node.js V17及以后版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响. 在node.j ...

  5. 24 式加速你的 Python

    一,分析代码运行时间 第1式,测算代码运行时间 平凡方法 快捷方法(jupyter环境) 第2式,测算代码多次运行平均时间 平凡方法 快捷方法(jupyter环境) 第3式,按调用函数分析代码运行时间 ...

  6. Win32 GUI 汇编

    获取句柄 API函数 GetModuleHandle 取模块句柄,lpModuleName 是一个指向模块名称字符串的指针,使用 NULL 获取当前程序句柄. invoke GetModuleHand ...

  7. CMU15445 (Fall 2020) 之 Project#1 - Buffer Pool 详解

    前言 去年暑假完成了 CMU15-445 Fall 2019 的四个实验,分别对应下述博客: CMU15445 (Fall 2019) 之 Project#1 - Buffer Pool 详解 CMU ...

  8. element-ui Tabs 标签页刷新页面状态不丢失

    element-ui Tabs 标签页刷新页面状态不丢失 转载请表明出处 https://www.cnblogs.com/niexianda/p/14765111.html 效果 一般在使用Tabs组 ...

  9. 之江实验室: 如何基于 JuiceFS 为超异构算力集群构建存储层 ?

    今天,高性能计算结合人工智能技术正在推动科研创新.例如通过破解水稻基因密码推动作物育种从"试验选优"向"计算选优"发展,在医药领域快速分析分子与蛋白之间的相互作 ...

  10. BeEF记录

    前情提要 最近项目上常规手段遇阻,计划进行水坑钓鱼,一番搜索找到近期SolarMarker组织的手法,但是没有找到相关样本,于是就自己实现了一个类似的前端功能(水坑手法项目会持续记录学习,但目前不会放 ...