使用shell 輸出矩形,空心矩形,三角形,菱形,平行四邊形,梯形,以及九九乘法比
阿新 • • 發佈:2021-07-20
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