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

news2025/1/21 7:13:01

一 简介

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++))
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

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

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++))
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:~$

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

#!/bin/bash
for((i=1;i<=9;i++))
do
    echo -ne "\033[1;4;32m| \033[0m"
    for((a=1;a<=i;a++))
    do
        let 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  | "
    done
    echo
done

执行结果:

小结 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置anaconda环境变量

conda环境变量的配置配置环境变量找到anaconda安装位置打开环境变量配置设置输入python命令跳入商店问题总结配置环境变量 找到anaconda安装位置 首先下载好conda环境&#xff0c;例如我下载在D盘 打开环境变量配置设置 可以按winS进入搜索框&#xff0c;输入环境变量&…

PyQt5学习笔记--摄像头实时视频展示、多线程处理、视频编解码

目录 1--前言 2--基于Qt Designer设计ui文件 3--视频的编解码操作 4--完整代码 5--结果展示 6--存在的问题 7--参考 1--前言 ① 创建两个线程&#xff0c;主线程为ui线程&#xff0c;子线程用于读取摄像头视频&#xff0c;将处理后的图像帧数据&#xff08;处理操作可以…

开放域类型发现:Open Relation and Event Type Discovery with Type Abstraction

1 什么是type discovery? “relation discovery” (Yao et al., 2011; Marcheggiani and Titov, 2016),“open relation extraction” (Wu et al., 2019; Hu et al., 2020) and “event type induction” (Huang and Ji, 2020; Shen et al., 2021). In this paper, we unify …

[项目](美多商城)(数据库课设/软件工程大作业/软件工程课设)项目的创建、配置、说明文档与源码

文章目录&#x1f498; 相关说明&#x1f498; 美多商城前台前端项目创建与配置&#x1f496; 项目的创建&#x1f496; 配置UI组件库&#x1f49d; 安装&#x1f49d; 全局引入与全局注册&#x1f49d; 局部引入与局部注册&#x1f49d; 定制主题&#x1f496; 配置axios&…

【并发】Java并发线程池底层原理详解与源码分析(上)

【并发】Java并发线程池底层原理详解与源码分析&#xff08;上&#xff09; 线程池与线程对比 使用线程的方式运行 使用线程池的方式运行 分析 单线程、多线程、线程池效率问题 详细代码 结果分析 单线程为什么是最快的&#xff1f; 单线程都这么快了&#xff0c;我…

第四周 牛背山云海——拍拍大场景,自拍延时片段

目录4.1 面对广阔云海拍张全景照片&#xff0c;再来一组延时片段4.2 认识镜头滤镜4.3 补充技术基础知识&#xff1a;白平衡、色温4.4 小博士课堂——延时摄影课件4.1 面对广阔云海拍张全景照片&#xff0c;再来一组延时片段 云海 雪山 雅安境内的牛背山拍摄云海 牛背山可以看到…

java刷题day 04

一. 单选题&#xff1a; 解析&#xff1a;队列&#xff1a;先到先服务解析&#xff1a;final不能修饰接口&#xff0c;成员变量可以用final修饰 解析&#xff1a; A&#xff1a; 算法是指解题方案的准确而完整的描述&#xff0c;算法不等于程序&#xff0c;也不等于计算方法 BC…

Linux 时间同步 ntpdchrony 内网

Linux 时间同步 ntpd&chrony 在任何服务器集群中&#xff0c;为了更好的协同工作&#xff0c;除了一些互信机制外&#xff0c;需要的就是时间同步功能&#xff0c;如果时间不同步&#xff0c;就好比让在中国的同事与美国的同事进行沟通&#xff0c;会造成各种奇奇怪怪的时…

excel笔记

1.快速填充 当需要提取出电子邮件里的名称&#xff0c;可以在第一行里手动输入Nancy后&#xff0c;直接按快捷键ctrl e进行快速填充&#xff0c;可以直接获得预期数据 如果不用快捷键&#xff0c;也可以点击指定位置的图标&#xff0c;实现这一功能 快速填充不仅可以将进行…

大数据中的R语言——中国大学MOOC课程笔记

第一章 R语言简介 1.1 简介 R的特性&#xff1a; • 免费的 • 一个全面的统计研究平台 • 拥有顶尖水准的制图功能 • 一个可进行交互式数据分析和探索的强大平台 • 轻松地从各种类型的数据源导入数据&#xff0c;包括文本文件、数据库管理系统、统计软件&#xff0c;乃…

rabbitMQ 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计

一、消息顺序性 消息队列中的若干消息如果是对同一个数据进行操作&#xff0c;这些操作具有前后的关系&#xff0c;必须要按前后的顺序执行&#xff0c;否则就会造成数据异常。 举例&#xff1a;   比如通过mysql binlog进行两个数据库的数据同步&#xff0c;由于对数据库的…

内存和函数

程序的内存布局 Linux默认情况下将高地址的1GB空间分配给内核&#xff0c;用户进程使用剩下2GB或者3GB的内存空间。在用户空间里&#xff0c;也有很多地址区间有特殊的地位&#xff0c;一般来讲&#xff0c;应用程序使用的内存空间里有如下"默认"的区域 1、栈&#…

疫情可视化part2

前言 这是疫情可视化最开始的文章&#xff0c;有需要了解的可前往查看&#xff1a;https://blog.csdn.net/xi1213/article/details/126824752。 本来说有时间就把这个项目完结了的&#xff0c;结果后面一直有事拖着&#xff0c;直到现在十一月份了才搞完。老样子&#xff0c;先…

F1. 生活在树上(easy version)树,dfs

题目链接 F1. 生活在树上&#xff08;easy version&#xff09; 题目背景 本题是 B 组的最后一题&#xff0c;是 F2 题的简单版本&#xff0c;两道题目的解法略有不同。本题和 F2 题在题意上的区别在于本题给定树上的边权&#xff0c;而不是点权。 小智生活在「传智国」&am…

汽车 Automotive > SOME/IP VS DDS调研和未来方向

参考&#xff1a;JASPAR, General incorporated association&#xff1a;What is the conqueror in the SOA platform for the future in-vehicle networks? 目录 SOME/IP介绍参考 DDS介绍 SOME/IP VS DDS 研究方向 SOME/IP介绍参考 汽车Automotive &#xff1e; SOME/…

MAC安全(防MAC泛洪攻击)

一、MAC地址表项分类&#xff1a; 1.1 动态表项&#xff1a;通过对帧内的源MAC进行学习而来&#xff0c;有老化时间 1.2 静态表项&#xff1a;由管理员手工配置&#xff0c;不会老化 1.3 黑洞表项&#xff1a;丢弃特定源MAC或目的MAC,不会老化 静态和黑洞表项不会被动态表项…

类与对象(下篇)

类与对象&#xff08;下&#xff09;再谈构造函数回顾构造函数初始化列表explicit 关键字拷贝构造函数也具有初始化列表友元 friend友元函数输入输出流的重载友元类static 成员内部类再谈构造函数 回顾构造函数 在上一篇博客中提到了构造函数&#xff0c;构造函数其主要目的是…

类与对象(中篇)

类中六个默认成员函数构造函数基本概念构造函数特性析构函数基本概念析构函数特性拷贝构造函数基本概念拷贝构造函数特性赋值运算符重载概念引入运算符重载函数的特性部分运算符的重载函数判等赋值前置 、前置--后置、后置--const 成员函数取地址只要生成一个类 &#xff0c;那…

iOS_Custom Transition Animation 自定义转场动画

文章目录1、push-pop 动画协议2、present-dismiss 动画协议3、实现转场动画协议3.1 动画时长3.2 push or present animation (显示动画)3.3 动画结束3.4 pop or dismiss animation (消失动画)4、UIPresentationController4.1 设置presentVC的frame4.2 present 动画4.3 dismiss …

Docker快速安装Oracle 12c

【Oracle系列3】Docker快速安装Oracle 12c 背景 现在还很多企业用12c&#xff0c;以这个版本为例&#xff0c;介绍docker快速启动Oracle并做实验 步骤 1、docker环境的安装&#xff08;略&#xff09; 2、查询镜像&#xff0c;挑选镜像 docker search oracle结果 StoneM…