shell中的printf实践:美颜的九九乘法表
创始人
2024-02-20 21:13:24
0

一 简介

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

printf [格式] 参数

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

 应用案例:

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

csdn@ubuntu:~$ printf "|%d|" 12
|12|csdn@ubuntu:~$ printf "|%d|" 12
|12|csdn@ubuntu:~$ printf "|%d|\n" 12
|12|
csdn@ubuntu:~$ printf "|%5d|\n" 12
|   12|
csdn@ubuntu:~$ printf "|%-5d|\n" 12
|12   |
csdn@ubuntu:~$ printf "|%05d|\n" 12
|00012|
csdn@ubuntu:~$

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

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

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

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

源码:mul.sh

#!/bin/bash
for((i=1;i<=9;i++))
doecho -n "| "for((a=1;a<=i;a++))dolet c=$i*$a;echo -n "$a*$i="[[ $a -gt 1 ]] && printf "%-3d| " $c || printf "%-2d| " $cdoneecho
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:~$ 

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

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

#!/bin/bash
for((i=1;i<=9;i++))
doecho -n "| "for((a=1;a<=i;a++))dolet 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  | "doneecho
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:~$

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

#!/bin/bash
for((i=1;i<=9;i++))
doecho -ne "\033[1;4;32m| \033[0m"for((a=1;a<=i;a++))dolet c=$i*$a;#echo -n "$a*$i="printf "\033[1;4;32m$a*$i=\033[0m"[[ $a -gt 1 ]] && printf "\033[1;4;32m%-3d|\033[0m"  $c || printf "\033[1;4;32m%-2d|\033[0m" $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  | "doneecho
done

执行结果:

小结 

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...