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