本文共 1653 字,大约阅读时间需要 5 分钟。
【前言】
练习shell,提高逻辑能力。
【脚本】
三角形与菱形均通过几个for循环实现,当然也可以用while。
下面是脚本内容:
[三角形]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash read -p "please input the longs:" long for ((i=1;i<=$long;i++)) do for ((j=$long;j>i;j--)) #控制空格输出 do echo -n " " done for m in ` seq 1 $i` #输出所在行数相同的数字个数,如在第三行,就输出3个3 do echo -n "$i" done #for((n=1;n<i;n++)) for n in ` seq 2 $i` #输出所在行数减一的数字个数,如在第三行,就输出2个三 do ##这连个for循环可以整合到一块,实现每行输出(2*所在行数-1)个数字 echo -n "$i" done echo "" done |
执行后的效果图:
若将上述脚本内层的两个for循环内"echo -n "$i""的$i换为*后,再次执行脚本效果如下:
[菱形]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #!/bin/bash read -p "please input the longs:" long for ((i=1;i<=$long;i++)) #图形上半部分 do for ((j=$long;j>i;j--)) do echo -n " " done for m in ` seq 1 $i` do echo -n "*" done #for((n=1;n<i;n++)) for n in ` seq 2 $i` do echo -n "*" done echo "" done for ((i=2;i<=$long;i++)) #图形下半部分 do for ((j=1;j<i;j++)) do echo -n " " done let k=$long+1-$i for m in ` seq 1 $k` do echo -n "*" done for ((n=1;n<k;n++)) #for n in `seq 2 $k` do echo -n "*" done echo "" done |
改进后:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #!/bin/bash read -p "please input the longs:" long for ((i=1;i<=$long;i++)) #控制行数 do for ((j=$long;j>i;j--)) #控制空格输出 do echo -n " " done let "g=2*i-1" for m in ` seq 1 $g` #控制*数量 do echo -n "*" done echo "" done for ((i=2;i<=$long;i++)) #控制行数 do for ((j=1;j<i;j++)) #控制空格输出 do echo -n " " done let "k=2*(long-i)+1" for m in ` seq 1 $k` #控制*数量 do echo -n "*" done echo "" done |
执行后的效果图:
本文转自 xoyabc 51CTO博客,原文链接:http://blog.51cto.com/xoyabc/1727758,如需转载请自行联系原作者