内容预知
1.双重循环的介绍与运用
对于一些重复性动作我们可以用单层循环来满足重复性操作的需求,当这些重复性操作有了别的分支操作时,便不是一个变量就能够解决问题,所以我们要再引入一层循环,让操作的输出结果更见详细化或者是通过一个脚本满足更为复杂的循环需求
单层循环:执行命令从上至下依次执行命令,进行条件判断,如果没有达到退出循环的要求,
便再次进行该操作
双重循环:循环中嵌套循环(在这里我们将外面的循环称作外部循环,嵌套在里面的叫内部循环)
当外部循环执行一次时,内部循环就要将自身的所有循环进行一遍,一整个双重循环结束后,内部循环执行的次数等于自己本身循环的所有次数乘以外部循环的所有循环次数
运用演示:
- #!/bin/bash
-
- #这是一个双重循环的测试实验
-
-
- for ((i=1;i<=5;i++))
- do
- echo "=============这是外部循环执行的第 $i 次==================== "
- for ((a=1;a<=5;a++))
- do
- echo "这是内部循环执行的第 $a 次"
- done
-
- done
结果执行:
- #!/bin/bash
- i=1
- while [ $i -le 9 ]
- do
- a=1
- while [ $a -le $i ]
- do
- echo -n -e "$a*$i=$[i*a]\t"
- let a++
- done
- let i++
- echo ""
- done
结果测试:
2.循环的结束语句
shell脚本常用的循环语句有三种:exit continue break
正常的循环情况下for循环和while循环是只要条件符合就会一直循环下去,而until循环是只要条件不成立,就会一直循环。但是有时我们利用循环并不想要循环输出的全部结果,而是需要它的一部分结果时,这时便引入了结束语句来帮助我们获取指定范围内的循环输出结果,或者是让原本的死循环合理退出
1)break 的默认作用是退出单层循环
运用演示
结果测试:
2)但是当break后面跟上了数字以后,数字为多少时,就会退出多少层循环
运用演示:
结果测试:
1)exit的默认作用时直接结束脚本进程,到此代表着脚本的结束
运用演示
测试结果:
2)exit 后面跟上数字后 代表着结束该进程并且将该数字修改为新的返回码(代替$?中要输出的值)
运用演示:
测试结果:
3.双重循环之花式打印图形
- #!/bin/bash
-
- i=1
- while [ $i -le 9 ];
- do
- echo -n '*'
- let i++
- done
- echo ""
输出结果:
- #!/bin/bash
-
- i=1
- while [ $i -le 9 ]
- do
- echo "*"
- let i++
- done
输出结果:
- #!/bin/bash
-
-
- i=1
- while [ $i -le 9 ]
- do
- a=1
- while [ $a -le 9 ]
- do
-
- echo -n '*'
- let a++
- done
- echo ""
- let i++
- done
输出结果:
- #!/bin/bash
-
-
- i=1
- while [ $i -le 9 ]
- do
- a=1
- while [ $a -le 9 ]
- do
- if [ $i -eq 1 -o $i -eq 9 ];then
- echo -n '*'
- else
- if [ $a -eq 1 -o $a -eq 9 ];then
- echo -n "*"
- else
- echo -n " "
- fi
- fi
- let a++
- done
- echo ""
- let i++
- done
输出结果:
- #!/bin/bash
-
- i=1
- while [ $i -le 9 ]
- do
- a=1
- while [ $a -le $i ]
- do
- echo -n '*'
- let a++
-
- done
- echo ""
- let i++
- done
输出结果:
- #!/bin/bash
- i=1
- while [ $i -le 9 ]
- do
- a=9
- while [ $a -ge $i ]
- do
- echo -n '*'
- let a--
- done
- echo ""
- let i++
- done
输出结果:
- #!/bin/bash
-
- #用数学公式打印等腰三角形
- i=1
- while [ $i -le 9 ]
- do
- a=9
- while [ $a -ge $i ]
- do
- echo -n ' '
- let a--
- done
- b=$[(i*2)-1]
- c=1
- while [ "$c" -le "$b" ]
- do
- echo -n '*'
-
- let c++
-
- done
-
- let i++
- echo ""
-
-
- done
输出结果:
- #用图形拼接出等腰三角形
-
-
- i=1
- while [ $i -le 9 ]
- do
- a=9
- while [ $a -ge $i ]
- do
- echo -n ' '
- let a--
- done
- b=1
- while [ $b -le $i ]
- do
- echo -n '*'
- let b++
- done
- c=2
- while [ $c -le $i ]
- do
- echo -n '*'
- let c++
- done
- let i++
- echo ""
- done
输出结果:
3.4.3 数学法打印倒立等腰三角形
- # 数学表达法打印倒等腰三角形
- d=9
- while [ $d -ge 1 ]
- do
- e=9
- while [ $e -ge $d ]
- do
- echo -n ' '
- let e--
- done
- f=$[(2*d)-1]
- g=1
- while [ $g -le $f ]
- do
- echo -n '*'
- let g++
- done
- let d--
- echo ""
- done
输出结果:
- #!/bin/bash
-
-
- i=1
- while [ $i -le 9 ]
- do
- b=1
- while [ $b -le $i ]
- do
- echo -n ' '
- let b++
- done
-
- a=1
- while [ $a -le 9 ]
- do
- echo -n '*'
- let a++
- done
-
- echo ""
- let i++
- done
- ~
输出结果:
同理:先打印一个空格填充的倒立直角三角形在打印一个矩形
就可以得到不同方向的平行四边形
- #!/bin/bash
- i=1
- while [ $i -le 9 ]
- do
- a=1
- while [ $a -le 9 ]
- do
- echo -n '*'
- let a++
- done
- b=1
- while [ $b -le $i ]
- do
- echo -n '*'
- let b++
- done
- let i++
- echo ""
- done
输出结果:
同理:一个空格填满的倒立直角三角形,接星号填满的剩余矩形部分,再加上另一个矩形
即可形成换方向的直角梯形
方法一:
上面两个不同方向的直角梯形拼接即可
方法二:
等腰三角形,起始行进行改变即可(数学方法:等腰三角形切割掉顶角就是等腰梯形)
- #!/bin/bash
-
- #使用拼接法加数学表达法实现菱形的打印
-
-
-
- #上半部分为图形拼接的等腰三角形
- i=1
- while [ $i -le 9 ]
- do
- a=9
- while [ $a -ge $i ]
- do
- echo -n ' '
- let a--
- done
- b=1
- while [ $b -le $i ]
- do
- echo -n '*'
- let b++
- done
- c=2
- while [ $c -le $i ]
- do
- echo -n '*'
- let c++
- done
- echo ""
- let i++
- done
-
- #下半部分为 数学表达法的倒等腰三角形
- d=8
- while [ $d -ge 1 ]
- do
- e=9
- while [ $e -ge $d ]
- do
- echo -n ' '
- let e--
- done
- f=$[(2*d)-1]
- g=1
- while [ $g -le $f ]
- do
- echo -n '*'
- let g++
- done
- let d--
- echo ""
- done
输出结果:
中心思维:把原本定好的行数改变成一个变量,下半部分倒立的等腰三角形变为变量减一即可
- #!/bin/bash
-
- #使用拼接法加数学表达法实现菱形的打印
-
-
-
- #上半部分为图形拼接的等腰三角形
- read -p "请输入数字来控制菱形的大小,建议范围在(8-20)" num
- i=1
- while [ $i -le $num ]
- do
- a=$num
- while [ $a -ge $i ]
- do
- echo -n ' '
- let a--
- done
- b=1
- while [ $b -le $i ]
- do
- echo -n '*'
- let b++
- done
- c=2
- while [ $c -le $i ]
- do
- echo -n '*'
- let c++
- done
- echo ""
- let i++
- done
-
- #下半部分为 数学表达法的倒等腰三角形
- d=$[num-1]
- while [ $d -ge 1 ]
- do
- e=$num
- while [ $e -ge $d ]
- do
- echo -n ' '
- let e--
- done
- f=$[(2*d)-1]
- g=1
- while [ $g -le $f ]
- do
- echo -n '*'
- let g++
- done
- let d--
- echo ""
- done
测试结果: