在shell中九九乘法口诀表出现的一些问题

img

img


求问,怎样能把这个乘法口诀表之间的的各个算式分开呢?达到平时看到的口诀表那种。

img


是这样的效果吗

修改脚本如下所示,你这里需要使用printf进行格式化输出。修改脚本如下所示:

#!/bin/bash
for((i=1;i<=9;i++))
do
    echo -n "| "
    for((a=1;a<=i;a++))
    do
        let c=$i*$a;
        echo -n "$a*$i="
        [[ $a -gt 1 ]] && printf "%-3d| " $c || printf "%-2d| " $c
    done
    echo
done

img

csdn@ubuntu:~$ bash mul.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 |
csdn@ubuntu:~$


如果想使用echo达到相同的效果,就需要做大量的条件判断:修改脚本如下所示:

#!/bin/bash
for((i=1;i<=9;i++))
do
    echo -n "| "
    for((a=1;a<=i;a++))
    do
        let c=$i*$a;
        echo -n "$a*$i="
        #[[ $a -gt 1 ]] && printf "%-3d| " $c || printf "%-2d| " $c
        [[ $a -eq 1 ]] && echo -n "$c | " && continue;
        [[ $c -gt 1 ]] && [[ $c -gt 9 ]] && echo -n "$c | " && continue;
        [[ $c -gt 1 ]] && [[ $c -gt 9 ]] || echo -n "$c  | "
    done
    echo
done


执行效果:

csdn@ubuntu:~$ bash mul.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 |
csdn@ubuntu:~$


echo -n "$a*$i=$c "