首页 > 技术文章 > 使用shell 输出矩形,空心矩形,三角形,菱形,平行四边形,梯形,以及九九乘法比

zhijiyiyu 2021-07-20 12:46 原文

shell 脚本练习之多重循环



1.使用循环,划出长为20,宽为10 的矩形

#!/bin/bash

for ((i=1;i<=10;i++))   #外循环循环十遍。这是输出多少行,即宽
do

    for ((n=1;n<=20;n++))  #内循环循环二十遍。这是矩形的长。外循环每循环一次,内循环输出20 个*
    do
        echo -n "*"     #不换行输出符号“*”
    done

    echo ""   #输出空,用来做最后的换行

done

image-20210720100125139



2.在之前的基础上,输出空心矩形

空心矩形,可以将从第二行到第九行的 第二个到第十八个 符号 " * "替换成 空格" "

#!/bin/bash

for ((i=1;i<=10;i++))   #外循环循环十遍。这是输出多少行,即宽
do
    if [ $i -gt 1 -a $i -lt 10 ] ;then   #当i 值大于1,小于10 成立 
        echo -n "*"                  #不换行输出1 个*
        for ((k=1;k<=18;k++))      #k初始值为1,当k 值小于等于18,条件成立,每次k值加1
        do
            echo -n " "     #不换行输出空格。注意,双引号“ ” 里有一个空格,而不是直接双引号
        done
        echo -n "*"        #不换行输出一个*
    else

        for ((n=1;n<=20;n++))  #内循环循环二十遍。这是矩形的长。外循环每循环一次,内循环输出20 个*
        do

            echo -n "*"     #不换行输出符号“*”

        done

    fi

    echo ""   #输出空,用来做最后的换行。内循环结束,换一次行

done

image-20210720101414285



3.输出三角形

#!/bin/bash

for ((i=1;i<=10;i++))  #外循环 循环10次,这是三角形的高
do
        #因为是三角形是第一层1个*,第二层2个*..... 也就是说,内循环,第一次循环1 遍,第二次循环2遍.....和外循环 变量i 值的变化 一样,所以我们可以用 i的值,来控制内循环的次数
    for ((n=1;n<=$i;n++))  #内循环,变量 n初始值为1,当变量n 的值小于等于 变量i 的值时,条件成立。每次循环,n值加1。

    do
        echo -n "*"
    done

    echo ""
done

image-20210720102416383



4 . 输出倒三角

#!/bin/bash

for ((i=1;i<=10;i++))
do
    for ((n=10;n>=$i;n--))  #n取值10,当n值大于等于i 值时,条件成立。每次内循环,n值减1                #因为i的值是外循环每循环一次,i值加1。所以,外循环每循环1次,内循环的循环次数减1
    do
        echo -n "*"
    done
    
    echo ""
done

image-20210720103521381



5,将3的三角形反转

由于linux 是靠左显示,所以,我们无法直接显示反转的三角形,需要先输出空三角形,在接在后面输出实心的三角形

因为方便观察,所以将空格换成了 短杠"-"

#!/bin/bash

for ((i=1;i<=10;i++))
do
    ##输出空心倒三角
    for ((n=9;n>=$i;n--))   #因为最后一层的实心三角是贴着左边的,所以,这里的空心三角只要输出9层就够了
    do
        echo -n "-"
    done

    ##输出实心反三角
    for ((k=1;k<=$i;k++))
    do
        echo -n "*"
    done

    #换行
    echo ""
done

image-20210720104529137



6 . 在继续输出一个正三角在5后面,组成一个大的三角

#!/bin/bash

for ((i=1;i<=10;i++))
do
    ##输出空心倒三角
    for ((n=9;n>=$i;n--))
    do
        echo -n "-"
    done

    ##输出实心反三角
    for ((k=1;k<=$i;k++))
    do
        echo -n "*"
    done

    ##输出实行正三角 因为三角形的定点是一个*,所以后续的实心正三角,只要输出9行即可
    for ((j=2;j<=$i;j++))
    do
        echo -n "*"
    done


    #换行
    echo ""

done

image-20210720105150583



6.2使用数学的方法

因为该实心三角,第一层1个*,第二层3个*,第三层5个*,和层数关系是 2n-1

#!/bin/bash

for ((i=1;i<=10;i++))
do
    ##输出空心倒三角
    for ((n=9;n>=$i;n--))
    do
        echo -n "-"
    done


    a=$[($i*2)-1]
    for ((j=1;j<=$a;j++))
    do
        echo -n "*"
    done


    #换行
    echo ""

done

image-20210720110205202



7 . 将6的三角形颠倒

#!/bin/bash

for ((i=1;i<=10;i++))
do
    ##输出空心倒三角
    for ((n=1;n<=$i;n++))
    do
        echo -n "-"
    done


    ##输出实心反的倒三角
    for ((j=10;j>=$i;j--))
    do
        echo -n "*"
    done

    ##输出实心倒三角
    for ((k=9;k>=$i;k--))
    do
        echo -n "*"
    done

    #换行
    echo ""

done

image-20210720105714533



8 .输出菱形

菱形,其实就是将 6 和7 的图形拼接起来。只是要注意,其中一个要减一层

#!/bin/bash

#先输出大的正的等腰三角形
for ((i=1;i<=10;i++))
do
    ##输出空心倒三角
    for ((n=9;n>=$i;n--))
    do
        echo -n "-"
    done

    ##输出实心的等腰三角形  
    a=$[($i*2)-1]
    for ((j=1;j<=$a;j++))
    do
        echo -n "*"
    done


    #换行
    echo ""

done

#再输出大的倒过来的等腰三角形(注意,要减一行)
for ((i=1;i<=9;i++))
do
    ##输出空心倒三角
    for ((n=1;n<=$i;n++))
    do
        echo -n "-"
    done


    ##输出实心反的倒三角
    for ((j=9;j>=$i;j--))
    do
        echo -n "*"
    done

    ##输出实心倒三角
    for ((k=8;k>=$i;k--))
    do
        echo -n "*"
    done

    #换行
    echo ""

done
~      

image-20210720111008827



9.使用使用read 命令,让用户可以输入数字,生成相应的菱形

#!/bin/bash

read -p "请输入整数:" num


#先输出大的正的等腰三角形
for ((i=1;i<=$num;i++))
do
    ##输出空心倒三角
    for ((n=$[$num-1];n>=$i;n--))
    do
        echo -n "-"
    done

    ##输出实心的等腰三角形  
    a=$[($i*2)-1]
    for ((j=1;j<=$a;j++))
    do
        echo -n "*"
    done


    #换行
    echo ""

done

#再输出大的倒过来的等腰三角形(注意,要减一行)
for ((i=1;i<=$[$num-1];i++))
do
    ##输出空心倒三角
    for ((n=1;n<=$i;n++))
    do
        echo -n "-"
    done


    ##输出实心反的倒三角
    for ((j=$[$num-1];j>=$i;j--))
    do
        echo -n "*"
    done

    ##输出实心倒三角
    for ((k=$[$num-2];k>=$i;k--))
    do
        echo -n "*"
    done

    #换行
    echo ""

done

~      

image-20210720122350407



10 .输出平行四边形

#!/bin/bash

for ((i=1;i<=10;i++))
do
    #输出空正三角形
    for ((j=1;j<=$i;j++))
    do
        echo -n " "
    done

    #每一行输出10个*
    for ((k=1;k<=10;k++))
    do
        echo -n "*"
    done
    
    #换行
    echo ""
done

image-20210720122833126



11 .输出反向的平行四边形

#!/bin/bash

for ((i=1;i<=10;i++))
do
    #输出空正三角形
    for ((j=10;j>=$i;j--))
    do
        echo -n " "
    done

    #每一行输出10个*
    for ((k=1;k<=10;k++))
    do
        echo -n "*"
    done

    #换行
    echo ""
done

image-20210720123001728



12 .输出直角梯形

只要在11的平行四边形后面补一个反三角形即可

#!/bin/bash

for ((i=1;i<=10;i++))
do
    #输出空正三角形
    for ((j=10;j>=$i;j--))
    do
        echo -n " "
    done

    #每一行输出10个*
    for ((k=1;k<=10;k++))
    do
        echo -n "*"
    done


    for ((j=1;j<=$i;j++))
    do
        echo -n "*"
    done

    #换行
    echo ""
done

image-20210720123230023



方法二:

#!/bin/bash

for ((i=1;i<=10;i++))
do
    #输出空正三角形
    for ((j=10;j>=$i;j--))
    do
        echo -n " "
    done

    

    for ((k=1;k<=$[10+$i];k++))
    do
        echo -n "*"
    done


    #换行
    echo ""
done

image-20210720123407063


13 .输出等腰梯形

#!/bin/bash

for ((i=1;i<=10;i++))
do
    #输出空正三角形
    for ((j=10;j>=$i;j--))
    do
        echo -n " "
    done



    for ((k=1;k<=$[10+($i*2)];k++))
    do
        echo -n "*"
    done


    #换行
    echo ""
done

image-20210720123630821



14 . 输出九九乘法表

#!/bin/bash

for ((i=1;i<=9;i++))
do
    for ((n=1;n<=$i;n++))
    do
        sum=$[$i*$n]
        echo -n -e  "$i*$n=$sum\t"     #"echo -e \t " 输出制表符; "echo -n"不换行输出
    done
    echo ""
done

image-20210720124241828

推荐阅读