• shell中的printf实践:美颜的九九乘法表


    一 简介

    Linux系统中除了echo命令可以输出信息,还可以使用printf命令实现相同的效果。功能描述:printf命令可以格式化输出数据。printf命令的语法格式如下。

    printf [格式] 参数

    常用的格式字符串及功能描述下表:

     应用案例:

    输出的时候添加竖线,主要是为了突出显示格式化的效果。

    1. csdn@ubuntu:~$ printf "|%d|" 12
    2. |12|csdn@ubuntu:~$ printf "|%d|" 12
    3. |12|csdn@ubuntu:~$ printf "|%d|\n" 12
    4. |12|
    5. csdn@ubuntu:~$ printf "|%5d|\n" 12
    6. | 12|
    7. csdn@ubuntu:~$ printf "|%-5d|\n" 12
    8. |12 |
    9. csdn@ubuntu:~$ printf "|%05d|\n" 12
    10. |00012|
    11. csdn@ubuntu:~$

     该命令的格式%5d设置了打印宽度为5,以右对齐的方式显示整数12。注意,该命令的输出信息12前面有3个空格。3个空格+2个数字一起是5个字符的宽度。如果需要左对齐,则可以使用%-5d实现效果,比如下面这条命令。

    当右对齐时,默认前面补空格,如最后一个命令,也可以补0。

    注意,printf命令输出信息后,默认是不换行的!如果需要换行则可以使用\n命令符。

    实例1:printf输出九九乘法表:

    源码:mul.sh

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

    输出结果:还是挺漂亮的。

    1. csdn@ubuntu:~$ bash mul.sh
    2. | 1*1=1 |
    3. | 1*2=2 | 2*2=4 |
    4. | 1*3=3 | 2*3=6 | 3*3=9 |
    5. | 1*4=4 | 2*4=8 | 3*4=12 | 4*4=16 |
    6. | 1*5=5 | 2*5=10 | 3*5=15 | 4*5=20 | 5*5=25 |
    7. | 1*6=6 | 2*6=12 | 3*6=18 | 4*6=24 | 5*6=30 | 6*6=36 |
    8. | 1*7=7 | 2*7=14 | 3*7=21 | 4*7=28 | 5*7=35 | 6*7=42 | 7*7=49 |
    9. | 1*8=8 | 2*8=16 | 3*8=24 | 4*8=32 | 5*8=40 | 6*8=48 | 7*8=56 | 8*8=64 |
    10. | 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 |
    11. csdn@ubuntu:~$

    实例2:echo输出九九乘法表:

    这里不使用printf,而是使用了大量的判断,利用echo输出的

    1. #!/bin/bash
    2. for((i=1;i<=9;i++))
    3. do
    4. echo -n "| "
    5. for((a=1;a<=i;a++))
    6. do
    7. let c=$i*$a;
    8. echo -n "$a*$i="
    9. #[[ $a -gt 1 ]] && printf "%-3d| " $c || printf "%-2d| " $c
    10. [[ $a -eq 1 ]] && echo -n "$c | " && continue;
    11. [[ $c -gt 1 ]] && [[ $c -gt 9 ]] && echo -n "$c | " && continue;
    12. [[ $c -gt 1 ]] && [[ $c -gt 9 ]] || echo -n "$c | "
    13. done
    14. echo
    15. done

    执行效果如下所示:

    1. csdn@ubuntu:~$ bash mul.sh
    2. | 1*1=1 |
    3. | 1*2=2 | 2*2=4 |
    4. | 1*3=3 | 2*3=6 | 3*3=9 |
    5. | 1*4=4 | 2*4=8 | 3*4=12 | 4*4=16 |
    6. | 1*5=5 | 2*5=10 | 3*5=15 | 4*5=20 | 5*5=25 |
    7. | 1*6=6 | 2*6=12 | 3*6=18 | 4*6=24 | 5*6=30 | 6*6=36 |
    8. | 1*7=7 | 2*7=14 | 3*7=21 | 4*7=28 | 5*7=35 | 6*7=42 | 7*7=49 |
    9. | 1*8=8 | 2*8=16 | 3*8=24 | 4*8=32 | 5*8=40 | 6*8=48 | 7*8=56 | 8*8=64 |
    10. | 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 |
    11. csdn@ubuntu:~$

    实例三 :美颜的九九乘法表:

    1. #!/bin/bash
    2. for((i=1;i<=9;i++))
    3. do
    4. echo -ne "\033[1;4;32m| \033[0m"
    5. for((a=1;a<=i;a++))
    6. do
    7. let c=$i*$a;
    8. #echo -n "$a*$i="
    9. printf "\033[1;4;32m$a*$i=\033[0m"
    10. [[ $a -gt 1 ]] && printf "\033[1;4;32m%-3d|\033[0m" $c || printf "\033[1;4;32m%-2d|\033[0m" $c
    11. #[[ $a -eq 1 ]] && echo -n "$c | " && continue;
    12. #[[ $c -gt 1 ]] && [[ $c -gt 9 ]] && echo -n "$c | " && continue;
    13. #[[ $c -gt 1 ]] && [[ $c -gt 9 ]] || echo -n "$c | "
    14. done
    15. echo
    16. done

    执行结果:

    小结 

  • 相关阅读:
    广西建筑模板厂家批发——能强优品木业
    【多线程】信号量 Semaphore
    h5+js 移动端监听点击、移动、松开,获取鼠标位置
    【算法】常见位运算总结
    Visual Studio 2019下使用C++与Python进行混合编程——环境配置与C++调用Python API接口
    Java多线程之Thread和Runnable多线程的简单实现(适合小白入门,十分简单)
    Rust 构建跨平台 GUI 的新选择
    【linux学习】文本文件编辑命令
    什么叫做虚基类,它有何作用
    d的指针算术
  • 原文地址:https://blog.csdn.net/yueni_zhao/article/details/128064160