1. 程式人生 > 其它 >使用shell 輸出矩形,空心矩形,三角形,菱形,平行四邊形,梯形,以及九九乘法比

使用shell 輸出矩形,空心矩形,三角形,菱形,平行四邊形,梯形,以及九九乘法比

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



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



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



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



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



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



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



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



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
~      



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

~      



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



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



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



方法二:

#!/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




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



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