shell的双重循环(教你花式打印图形)

349 阅读1分钟

使用双循环花式打印图形

外层循环用于表示行数

内层循环用于表示列数

1.实行矩形

每一行打印9个星星,一共打印9行

#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=1;b<=9;b++))
  do
    echo -n '*'
  done
  echo ''
done
Snipaste_2022-08-30_17-55-20.png

2.空心矩形

步骤:第一行和第九行输出7个星星

2-6行,除第一列和最后一列输出星星,其余空格

#!/bin/bash
for ((a=1;a<=7;a++))
do
  for ((b=1;b<=7;b++))
  do
  if [ $a -eq 1 -o $a -eq 7 ]
  then
    echo -n '*'
  else
    if [ $b -eq 1 -o $b -eq 7 ]
    then
      echo -n '*'
    else
      echo -n ' '  
     fi
  fi
  done
  echo ''
done
Snipaste_2022-08-30_18-09-26.png

3.直角三角形

#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=1;b<=a;b++))
  do
  echo -n '*'
  done
  echo ""
done

Snipaste_2022-08-30_18-11-06.png

4.倒直角三角形

#!/bin/bash
for ((a=9;a>=1;a--))
do
  for ((b=1;b<=a;b++))
  do
  echo -n '*'
  done
  echo ""
done

Snipaste_2022-08-30_18-14-29.png

5.反直角三角形

#!/bin/bash
#反三角形for ((a=1;a<=9;a++))
do
  for ((b=9;b>=a;b--))
  do
     echo -n ' '
  done
  for ((c=1;c<=a;c++))
  do
    echo -n '*'
  done
  echo
done

Snipaste_2022-08-30_18-12-44.png

6.等腰直角三角形

方法一:图形拼接法

#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=a;b--))
  do
     echo -n ' '
  done
  for ((c=1;c<=a;c++))
  do
    echo -n '*'
  done
  for ((d=2;d<=a;d++))
  do
    echo -n '*'
  done
  echo ''
done

Snipaste_2022-08-30_18-22-23.png

方法二:数学公式

#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=a;b--))
  do
     echo -n ' '
  done
​
  i=$[(a * 2) - 1]
  for ((c=1;c<=i;c++))
  do
    echo -n '*'
  done
  echo ''
done

Snipaste_2022-08-30_18-23-50.png

7.倒等腰三角形

方法一:图形拼接法

#!/bin/bash
for ((a=1;a<=9;a++))
do
 for ((b=1;b<=a;b++))
 do
  echo -n ' '
 done
 for ((c=9;c>=a;c--))
 do
  echo -n '*'
 done
 for  ((d=8;d>=a;d--))
 do
   echo -n '*'
 done
 echo ''
done

Snipaste_2022-08-30_18-35-56.png

方法二:数学公式

#!/bin/bash
#倒等腰三角形
for ((a=9;a>=1;a--))
do
  for ((b=9;b>=a;b--))
  do
    echo -n ' '
  done
   i=$[(a * 2) - 1]
  for ((c=1;c<=i;c++))
  do
    echo -n '*'
  done
  echo
done

Snipaste_2022-08-30_18-36-40.png

8.菱形

先输出一个正等腰三角形(9行);再输出一个倒等腰三角形(8行)

#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=a;b--))
  do
     echo -n ' '
  done
​
  i=$[(a * 2) - 1]
  for ((c=1;c<=i;c++))
  do
    echo -n '*'
  done
  echo ''
donefor ((a=8;a>=1;a--))
do
  for ((b=9;b>=a;b--))
  do
    echo -n ' '
  done
   i=$[(a * 2) - 1]
  for ((c=1;c<=i;c++))
  do
    echo -n '*'
  done
  echo
done

Snipaste_2022-08-30_18-37-38.png

Snipaste_2022-08-30_18-37-46.png

9.平行四边形

方法一:先输出一个空格填充的直角三角形,之后每行输出相同个数的星星

#!/bin/bash
#平行四边形
for ((a=1;a<=9;a++))
do
  for ((c=1;c<=a;c++))
  do
    echo -n ' '
  done
  for ((b=1;b<=9;b++))
  do
    echo -n '*'
  done
  echo ''
done

Snipaste_2022-08-30_18-40-55.png

方法二:先输出一个空格填充的倒直角三角形,之后每行输出相同个数的星星

#!/bin/bash
#平行四边形
for ((a=1;a<=9;a++))
do
  for ((c=9;c>=a;c--))
  do
    echo -n ' '
  done
  for ((b=1;b<=9;b++))
  do
    echo -n '*'
  done
  echo ''
done

Snipaste_2022-08-30_18-42-27.png

10、直角梯形

将平行四边形左边加上一个直角三角形

方法一:

#!/bin/bash
#直角梯形
for ((a=1;a<=9;a++))
do
  for ((b=1;b<=9;b++))
  do
    echo -n '*'
  done
  for ((c=1;c<=a;c++))
  do
    echo -n '*'
  done
  echo
done

Snipaste_2022-08-30_18-30-44.png

方法二:

#!/bin/bash
#直角梯形2
for ((a=1;a<=9;a++))
do
    c=$[9 + a]
    for ((b=1;b<=c;b++))
    do
       echo -n '*'
    done
    echo ''
done

Snipaste_2022-08-30_18-32-27.png

11.等腰梯形

#!/bin/bash
#等腰直角梯形for ((a=1;a<=9;a++))
do
    for ((d=9;d>=a;d--))
    do
      echo -n ' '
    done
    c=$[9 + a]
    for ((b=1;b<=c;b++))
    do
       echo -n '*'
    done
    for ((c=1;c<=a;c++))
    do
      echo -n '*'
    done
    echo ''
done

Snipaste_2022-08-30_18-34-22.png