此链接通往 Bash Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:
目的:
实现 打印 99乘法表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
——————————————————————————————————————————————————————————————————————— ——————————————————————————————————————————————————
思路:
使用 两个for循环;
一个 for 循环 做 换行作用;也就是 只 执行 echo " " 命令,
另一个 for 循环:是打印 这个乘法 a * b = c;从乘法表来看:
竖着来看 a是不变的! b 是递增的 !
横着来看 a是递增的! b 是不变的 !
使用 for 循环嵌套:
★ 执行第一个 for 循环 来实现打印 9 个行:
for((i=1;i<=9;i++));do echo ;done
★ 第二个for 循环 实现的是: a * b =c
root@zhengzelin:~\# for((a=1;a<=9;a++));do let c=1*$a ; echo "1*$a=$c ";done
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9
成功打印出第一列 乘法表! 但是第二列怎么打? 这就将两个for循环套进去!并且将第二个for循环中的 1 换位 $i 保证是变量!
root@zhengzelin:~\# for((i=1;i<=9;i++))do for((a=1;a<=9;a++));do let c=$i*$a ; echo "$i*$a=$c ";done;echo;done
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9
2*1=2
2*2=4
2*3=6
2*4=8
2*5=10
2*6=12
2*7=14
2*8=16
2*9=18
3*1=3
3*2=6
3*3=9
3*4=12
3*5=15
3*6=18
3*7=21
3*8=24
3*9=27
4*1=4
4*2=8
4*3=12
4*4=16
4*5=20
4*6=24
4*7=28
4*8=32
4*9=36
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
5*6=30
5*7=35
5*8=40
5*9=45
6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36
6*7=42
6*8=48
6*9=54
7*1=7
7*2=14
7*3=21
7*4=28
7*5=35
7*6=42
7*7=49
7*8=56
7*9=63
8*1=8
8*2=16
8*3=24
8*4=32
8*5=40
8*6=48
8*7=56
8*8=64
8*9=72
9*1=9
9*2=18
9*3=27
9*4=36
9*5=45
9*6=54
9*7=63
9*8=72
9*9=81
最重要一点,这是因为我没有使用 echo 的-n 选项导致的h后果!当我加了 -n 之后:
root@zhengzelin:~$ for((i=1;i<=9;i++))do for((a=1;a<=9;a++));do let c=$i*$a ; echo -n "$a*$i=$c ";done;echo;done
1*1=1 2*1=2 3*1=3 4*1=4 5*1=5 6*1=6 7*1=7 8*1=8 9*1=9
1*2=2 2*2=4 3*2=6 4*2=8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18
1*3=3 2*3=6 3*3=9 4*3=12 5*3=15 6*3=18 7*3=21 8*3=24 9*3=27
1*4=4 2*4=8 3*4=12 4*4=16 5*4=20 6*4=24 7*4=28 8*4=32 9*4=36
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 6*5=30 7*5=35 8*5=40 9*5=45
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 7*6=42 8*6=48 9*6=54
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 8*7=56 9*7=63
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 9*8=72
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
经过排查,可以看出,这是因为,a 的取值范围搞错了!!!
排查原因:都知道 for 的嵌套 先执行 里面for循环的语句,执行完之后在执行 外面for循环的语句!
第一遍:
里面for循环输出的结果是:
1*1=1 2*1=2 3*1=3 4*1=4 5*1=5 6*1=6 7*1=7 8*1=8 9*1=9
外面 for 循环的执行命令是 echo ,执行结果是 换行!
正确的要求是:第一行只有 1*1=1;
所以,将 第二个for循环的范围变成: for((a=1;a<=$i;a++)) 即可!
当 i=1 时, a命令的结果执行一个, 当i=2 的时候,也就是第二行,有两个执行结果!
root@zhengzelin:~\# for((i=1;i<=9;i++))do for((a=1;a<=$i;a++));do let c=$i*$a ; echo -n "$a*$i=$c ";done;echo;done
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
使用 while 循环实现:
和上面的 for循环 嵌套 思路一样:
第一步:使用 while 循环 打印 9个 空行:
root@zhengzelin:~\# vim ./while.sh
#!/bin/bash
i=1
while [ $i -le 9 ]
do
echo " "
let i++
done
root@zhengzelin:~# ./while.sh
# 成功实现!
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
第二步,实现:打印 九九乘法表 第一列内容!
root@zhengzelin:~\# vim while.sh
#!/bin/bash
#i=1
#while [ $i -le 9 ]
#do
# echo
# let i++
#done
b=1
while [ $b -le 9 ]
do
let c=1*$b
echo "1*$b=$c"
let b++
done
root@zhengzelin:~# ./while.sh
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5
1*6=6
1*7=7
1*8=8
1*9=9
成功实现!
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
第三步:将前两个 while 结合在一起!
root@zhengzelin:~\# vim while.sh
#!/bin/bash
i=1
while [ $i -le 9 ]
do
b=1
while [ $b -le $i ]
do
let c=$i*$b
echo -n "$i*$b=$c "
let b++
done
echo
let i++
done
# 注意是嵌套哟,并不是两个while循环分开!
root@zhengzelin:~\# ./while.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
发现输出错误,改变脚本中 变量的位置:
将 里面 while 循环的输出命令改为: echo -n "$b*$i=$c " (记住 $c 和 " 之间有空格,不然你的输出结果就没空格!)
root@zhengzelin:~# ./while.sh
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81