[root@linus ~]# cat test.sh
#!/bin/bash
for i in {1..9}
do
for o in `seq $i`
do
echo -n "$o*$i=$[$i*$o] "
done
echo
done
执行效果:
[root@linus ~]# sh test.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
[root@linus ~]# cat test1.sh
#!/bin/bash
for((i=1;i<=9;++i))
do
for((j=1;j<=i;j++))
do
echo -ne "$j*$i=$((i*j))\t"
done
echo
done
执行效果:
[root@linus ~]# sh test1.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
[root@linus ~]# cat test2.sh
#!/bin/bash
for o in `seq 1 9`
do
for i in `seq $o`
do
echo -n "$i*$o=$[$o*$i] "
done
echo
done
执行效果:
[root@linus ~]# sh test2.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
仔细看可以发现,不管是哪个脚本,都有在echo输出中末尾有个空格,或者是其代替符\t,然后又多了一个空白的echo,这都有什么用呢?
首先echo -n是不换行的意思,避免以竖行的形式输出,那样不好看。
然后看看echo后面为什么加空格,我将空格去掉,再执行一下脚本,看看效果
[root@linus ~]# sh test2.sh
1*1=1
1*2=22*2=4
1*3=32*3=63*3=9
1*4=42*4=83*4=124*4=16
1*5=52*5=103*5=154*5=205*5=25
1*6=62*6=123*6=184*6=245*6=306*6=36
1*7=72*7=143*7=214*7=285*7=356*7=427*7=49
1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64
1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81
这样显示是不是不对,一点都不友好,字符都连一块儿了,这个空格的作用就是用于分割输出的,加上就是这样的。
[root@linus ~]# sh test2.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
为什么每个脚本里面都有一个单独的echo命令呢,我们把这个echo去掉试试。在test2中将echo去掉,然后再执行一次,看看显示的是什么。
[root@linus ~]# sh test2.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 [root@linus ~]#
九九乘法表,变成一串了,echo命令难道是排列吗,那怎么可能,直接使用echo命令是显示空行的,但那是在前面没有屏幕输出的情况下。
[root@linus ~]# echo
在空格前面有字符的话,会先把字符显示出来
[root@linus ~]# echo "test "
test
后面看似什么都没有,其实是用空格填充的,使用终端的可以左键拉一下看看。
执行的脚本的时候,也是如此,首先,刚开始执行的乘法口诀表是从1乘到9,每行显示一次,也就是显示九行,把结果输出到屏幕,后续就开始从2开始乘起…依次排列,字符输出完后,剩余的部分就用空格填补。
echo命令的详细使用请转到===>https://blog.csdn.net/qq_42534026/article/details/103821939