【Shell】编程入门到精通保姆级教程:----printf 命令 📅 发布时间:2026/9/4 8:38:48 👁 浏览次数: 一、【Shell】编程入门printf 命令基础1.1、printf 命令介绍上一章节我们学习了 Shell 的echo命令本章节我们来学习 Shell 的另一个输出命令printf。printfprint formatted是一个用于格式化输出的 Shell 命令它源自 C 语言的printf()函数。与echo不同printf不会自动添加换行符并且可以精确控制输出的格式。printf由 POSIX 标准所定义因此使用printf的脚本比使用echo移植性好。printf使用引用文本或空格分隔的参数外面可以在printf中使用格式化字符串还可以制定字符串的宽度、左右对齐方式等。默认的printf不会像echo自动添加换行符我们可以手动添加\n。为什么使用printf格式控制可以指定字段宽度、精度和对齐方式类型安全不同类型的数据整数、浮点数、字符串等有对应的格式说明符可移植性行为在不同系统和Shell中更加一致复杂输出适合生成表格、报表等结构化输出1.2、基本语法printf命令的语法printf format-string [arguments...]参数说明format-string包含普通字符和格式说明符的字符串arguments...与格式说明符对应的变量或值格式说明符由%字符开始后跟一个或多个字符用于指定输出的格式。常用的格式说明符包括%s字符串%d十进制整数%f浮点数%c字符%x十六进制数%o八进制数%b二进制数%e科学计数法表示的浮点数1.3、工作流程解析格式字符串遇到普通字符直接输出遇到格式说明符以%开头时读取下一个参数按照说明符指定的格式处理该参数将结果插入到输出中处理完所有格式说明符后输出最终结果二、【Shell】编程入门实践示例✨2.1、基本使用# 简单字符串输出printfHello, World!\n# 带变量的输出nameAliceprintfHello, %s\n$name执行与输出$bashscript.sh Hello, World!Hello, Alice2.2、常用格式说明符# 整数printfDecimal: %d\nHex: %x\nOctal: %o\n255255255# 浮点数printfFloat: %f\nScientific: %e\n3.141593.14159# 字符串printfName: %s\nBob# 字符printfFirst letter: %c\nA执行结果Decimal:255Hex: ff Octal:377Float:3.141590Scientific:3.141590e00 Name: Bob First letter: A2.3、格式化控制# 字段宽度和对齐printf|%10s|\n|%-10s|\nrightleft# 数字前导零printfYear: %04d\n23# 浮点数精度printfPi: %.2f\n3.14159执行结果|right||left|Year: 0023 Pi:3.142.4、多参数处理printf%-10s %5d %8.2f\nApple52.5Orange31.75执行结果Apple52.50Orange31.75三、【Shell】编程入门扩展应用3.1、创建表格输出#!/bin/bash# 表头printf%-15s %10s %10s %10s\nItemQuantityPriceTotal# 分隔线printf%-15s %10s %10s %10s\n---------------------------------------------# 数据行printf%-15s %10d %10.2f %10.2f\nNotebook32.507.50printf%-15s %10d %10.2f %10.2f\nPen51.206.00printf%-15s %10d %10.2f %10.2f\nEraser20.501.00# 总计行printf%-15s %10s %10s %10.2f\nTotal:14.50输出效果Item Quantity Price Total --------------- ---------- ---------- ---------- Notebook32.507.50Pen51.206.00Eraser20.501.00Total:14.503.2、进度条实现#!/bin/bashforiin{1..20};doprintf\rProgress: [%-20s] %d%%$(printf%${i}s|tr #)$((i*5))sleep0.1doneprintf\n执行效果显示一个逐渐增长的进度条3.3、颜色输出#!/bin/bashRED\033[0;31mGREEN\033[0;32mNC\033[0m# No Colorprintf${RED}Error:${NC}Something went wrong\nprintf${GREEN}Success:${NC}Operation completed\n3.4、格式化表格脚本#!/bin/bash# author:朱朱# url:www.zhuzhu.comprintf%-10s %-8s %-4s\n姓名 性别 体重kgprintf%-10s %-8s %-4.2f\n郭靖 男66.1234printf%-10s %-8s %-4.2f\n杨过 男48.6543printf%-10s %-8s %-4.2f\n郭芙 女47.9876执行脚本输出结果如下所示姓名 性别 体重kg 郭靖 男66.12杨过 男48.65郭芙 女47.99%s %c %d %f都是格式替代符s输出一个字符串d整型输出c输出一个字符f输出实数以小数形式输出。%-10s指一个宽度为 10 个字符-表示左对齐没有则表示右对齐任何字符都会被显示在 10 个字符宽的字符内如果不足则自动以空格填充超过也会将内容全部显示出来。%-4.2f指格式化为小数其中.2指保留 2 位小数。3.5、引号与参数复用示例#!/bin/bash# author:朱朱# url:www.zhuzhu.com# format-string为双引号printf%d %s\n1abc# 单引号与双引号效果一样printf%d %s\n1abc# 没有引号也可以输出printf%s abcdef# 格式只指定了一个参数但多出的参数仍然会按照该格式输出format-string 被重用printf%s abc defprintf%s\nabc defprintf%s %s %s\na b c d e f g h i j# 如果没有 arguments那么 %s 用NULL代替%d 用 0 代替printf%s and %d\n执行脚本输出结果如下所示1abc1abc abcdefabcdefabc def a b c d e f g h i j and0四、【Shell】编程入门printf 的转义序列序列说明\a警告字符通常为ASCII的BEL字符\b后退\c抑制不显示输出结果中任何结尾的换行字符只在%b格式指示符控制下的参数字符串中有效而且任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略\f换页formfeed\n换行\r回车Carriage return\t水平制表符\v垂直制表符\一个字面上的反斜杠字符\ddd表示1到3位数八进制值的字符。仅在格式字符串中有效\0ddd表示1到3位的八进制值字符$printfa string, no processing:%s\nA\nBa string, no processing:A\nB$printfa string, no processing:%b\nA\nBa string, no processing:A B$printfwww.zhuzhu.com\awww.zhuzhu.com $#不换行五、【Shell】编程入门总结要点关键知识回顾概念说明示例基本语法printf “format” argsprintf %s hello格式说明符以%开头指定数据类型和格式%d(整数),%f(浮点数)转义字符特殊字符表示\n(换行),\t(制表符)字段宽度控制输出最小宽度%10s(10字符宽)精度控制浮点数小数位数%.2f(2位小数)常用格式说明符速查表说明符用途示例输入示例输出%s字符串“text”text%d十进制整数255255%x十六进制整数255ff%f浮点数3.141593.141590%.2f2位小数3.141593.14%c单个字符“A”A%%百分号-%