打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Shell脚本习题——打印三角形
userphoto

2022.10.25 北京

关注

需求:打印一个正三角形,要求用户输入一个数字n,然后打印边长为n个*字符的正三角形。

需求分析:

1. 正三角形,即三条边长度相同,三个角都为60°

2. 脚本需要用户交互,所以使用read -p实现,关键代码

read -p 'Please input a number: ' n

3. 正三角形,第一行为1个*,第二行为2个*,第三行为3个*,……以此类推,所以打印的*个数是递增的。假设n为10,关键代码

n=10for i in `seq $n`do    for j in `seq $i`    do        echo -n '*'    done    echodone

结果如下图

这段代码里,用到了echo -n,这是为了不打印换行符,从而实现第2行里两个*连在一起,3行里3个*连在一起,……

而每行最后面还需要换行,所以脚本里第8行代码的echo就是为了打印换行符。

4. 为了让打印的三角形美观,每个*后面需要带一个空格,*和空格就需要两个字符。假若如此的话,每行的字符都应该是2n个,只不过第一行除了一个*,其它字符都是空格,第二行除了两个*外,其它字符都是空格,当然两个*之间应该有一个空格。

5. 按上面的规律,第一行打印1对“*+空格”,第二行打印两对“*+空格”,第三行打印三对“*+空格”,……

假设n为10,关键代码如下:

n=10for i in `seq $n`do for j in `seq $i` do echo -n '* ' done echodone

相比较之前代码,仅仅是在*后面加了个空格。效果如下图:

6. 再来说一个关键问题,第一行在打印“*+空格”之前,应该先打印n-1个空格,然后再打印*,第二行打印n-2个空格,然后再打印*,第三行打印n-3个空格,然后打印*,……到了第n行也就是最后一行,打印0(n-n)个空格。

假设n为10,关键代码如下:

n=10for i in `seq $n`do    for k in `seq $[$n-1] -1 $i`    do        echo -n ' '    done    for j in `seq $i`    do        echo -n '* '    done    echodone

代码第4行,seq $[$n-1] -1 $i是为了实现倒序队列,第一次打印9个空格,第二次打印8个空格,第三次打印7个空格,……,第十次打印0个空格。

所以,最终脚本写出来是这样的:

#!/bin/bashread -p 'Please input a number: ' nfor i in `seq $n`do for k in `seq $[$n-1] -1 $i` do echo -n ' ' done for j in `seq $i` do echo -n '* ' done echodone

脚本运行结果如下:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【转】干货分享
纯PHP代码最好在文件末尾删除 PHP 结束标记 ‘?>‘
shell用iconv批量改变文件编码
K字型全等三角形、母子型正三角形
bat脚本批量静默安装程序
小学综合试题 (108)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服