[ SHELL编程 ] echo和printf使用实例
本文主要描述Linux系统中echo和printf命令的使用方法,包括命令参数的含义、使用技巧。
1、echo
了解一个命令我们首先要知道它能做什么,它有哪些参数,参数的含义,可以实现我们哪方面的需求。 echo可以直接将字符串打印输出到屏幕,也可以重定向输出到指定文件。
echo的语法:echo [option] [arguments]。首先看下字符串Hello Word打印
$ echo "Hello World"
Hello World
$
输出变量值
$ VAR1="Hello World"
$ echo "${VAR1}"
Hello World
可以观察到输出自动换行了。那如果我不想输出自动换行呢,带上参数-n?
$ echo -n "Hello World"
Hello World$
注意观察美元$符号的位置。这只是简单的输出,如果我想格式化输出字符串呢,先看下直接输出的
$ echo "Hello\tWorld\nI am Back"
Hello\tWorld\nI am Back
$
可以看到,直接输出了\t(制表符)、\n(换行符),与我们预期不符,加上参数-e,如下
$ echo -e "Hello\tWorld\nI am Back"
Hello World
I am Back
$
可以看到,\t(制表符)、\n(换行符)实现了作用,符合我们的预期要求。我们来看下echo所支持的参数和所支持的反斜线控制字符
echo支持参数:
-e :启用反斜线控制字符的转换
-n :取消行末之换行符号(与 -e 选项下的 \c 字符同义)
echo支持反斜线控制字符:
\n:NEWLINE,换行字符(常用)
\t:TAB,表格跳位键(常用)
\a:ALERT / BELL (从系统喇叭送出铃声)
\b:BACKSPACE ,也就是向左删除键
\c:取消行末之换行符号
\E:ESCAPE,跳脱键
\f:FORMFEED,换页字符
\r:RETURN,回车键
\v:VERTICAL TAB,垂直表格跳位键
\n:ASCII 八进位编码(以 x 开首为十六进制)
\\:反斜线本身
echo除了可以输出字符串内容外,结合重定向符号还可以完成很多工作。比如
(1)清空文件内容
$ echo > lion.txt
(2)创建制定内容的相关文件,比如SQL文件
$ rm -f select_username.sql
$ touch select_username.sql
$ echo "select username from dba_users;" >> select_username.sql
$ echo "exit" >> select_username.sql
查看下select_username.sql文件内容
$ cat select_username.sql
select username from dba_users;
exit
(3)作为函数函数返回字符串的输出,通常return都是只能返回整数。如下
#!/bin/bash function echo_value()
{
[ -f select_username.sql ] && echo "Good" || echo "Bad"
} return_str=$(echo_value)
echo "${return_str}"
查看输出结果(select_username.sql文件刚创建是存在的,所以判定式为true):
$ ./example.sh
Good
不太建议这么操作,建议还是使用全局变量去获取值。
(4)输出带颜色文字,注意这里是需要带参数-e。
#!/bin/bash
echo -e "\033[31mHello World\033[0m"
echo -e "\033[32mHello World\033[0m"
echo -e "\033[33mHello World\033[0m"
echo -e "\033[34mHello World\033[0m"
echo -e "\033[35mHello World\033[0m"
echo -e "\033[36mHello World\033[0m"
echo -e "\033[37mHello World\033[0m"
说明:30-黑色,31-红色,32-绿色,33-黄色或棕色,34-蓝色,35-紫色,36-青色,37-白色或灰色
输出结果如下:

带颜色输出可以起到强调作用,SHELL编程时常用。比如ERROR错误提示用红色告警、INFO信息提示用绿色等。再看下如何打印背景色,如下
#!/bin/bash echo -e "\033[41mI have a dream!\033[0m"
echo -e "\033[42mI have a dream!\033[0m"
echo -e "\033[43mI have a dream!\033[0m"
echo -e "\033[44mI have a dream!\033[0m"
echo -e "\033[45mI have a dream!\033[0m"
echo -e "\033[46mI have a dream!\033[0m"
echo -e "\033[47mI have a dream!\033[0m"
执行结果如下:

说明:40-黑色,41-红色,42-绿色,43-黄色或棕色,44-蓝色,45-紫色,46-青色,47-白色或灰色
到这里我们知道echo命令简单、实用,很多关于输出的需求都可以通过它来实现。但是如果我们想要格式化输出我们的字符串呢?想让我们输出美观一些呢?我们看一个例子
#!/bin/bash
NAME_1="Zhangsan"
ADDRESS_1="GuanDongZhangjiacun"
NAME_2="Lili"
ADDRESS_2="HaerbinLicun"
echo "NAME" "ADDRESS"
echo "${NAME_1}" "${ADDRESS_1}"
echo "${NAME_2}" "${ADDRESS_2}"
输出结果
NAME ADDRESS
Zhangsan GuanDongZhangjiacun
Lili HaerbinLicun
可以看到输出不是很美观,当然不影响功能。那么可以让输出格式化规范吗?可以,使用printf命令。我们修改下代码,如下
#!/bin/bash NAME_1="Zhangsan"
ADDRESS_1="GuanDongZhangjiacun" NAME_2="Lili"
ADDRESS_2="HaerbinLicun" printf "%10s : %-10s\n" "NAME" "ADDRESS"
printf "%10s : %-10s\n" "${NAME_1}" "${ADDRESS_1}"
printf "%10s : %-10s\n" "${NAME_2}" "${ADDRESS_2}"
查看输出结果:
NAME : ADDRESS
Zhangsan : GuanDongZhangjiacun
Lili : HaerbinLicun
可以看到字符串是格式化输出。下面我们来看下printf命令
2、printf
printf功能是格式并打印数据(format and print data),printf语法:printf format-string [arguments]
format-string为描述格式规范的字符串,arguments为参数列表,例如字符串或者变量,建议个数与format-string要求的数量相同。printf的格式指示符如下:
%c ASCII字符.显示相对应参数的第一个字符
%d,%i 十进制整数(常用)
%e 浮点格式([-d].precisione [+-dd])
%E 浮点格式([-d].precisionE [+-dd])
%g %e或%f转换,看哪一个较短,则删除结尾的零
%G %E或%f转换,看哪一个较短,则删除结尾的零
%s 字符串(常用)
%u 不带正负号的十进制值
%x 不带正负号的十六进制.使用a至f表示10至15
%% 字面意义的%
%X 不带正负号的十六进制.使用A至F表示10至15
我们知道,echo已经可以实现我们各种输出的需求,那么我们为什么还要 使用printf呢。原因自然是printf有echo命令不具备的特性。如下
(1)从命令行引用值
printf "%s %s" "Hello" "World"
(2)格式化输出
printf "%8s %-8s %5.2f\n" "Hello" "World" "1.0"
说明:
%-8s表示一个左对齐、宽度为8个字符字符串格式,不足8个字符,右侧补充相应数量的空格符。不带符号-表示右对齐
%5.2f表示右对齐、5个字符长度的浮点数,其中一个是小数点,小数点后面保留2位
(3)使用前导0扩展输出
printf "1%06d" "" #output 1000123
(4)与awk结合使用,如下
awk 'BEGIN{for(i=0;i<=5;i++)printf "1%02d\n",i}'
结果如下
到这里,echo和printf命令介绍结束,在使用时可以结合具体场景进行选择使用。最后我们来看一个打印提示信息的实例
#!/bin/bash # -------------------------------------------------------------------------------
# Function name: prompt_msg()
# Date : //
# Author :
# Description : Pring prompt message to screen
# Usage : prompt_msg "INFO" "Hello World"
# ------------------------------------------------------------------------------- function prompt_msg()
{
if [ $# -ne ];then
printf "\033[31mUsage: prompt_msg message_level message_info\n\033[0m"
fi local msg_level=$
local msg_info=$ if [ ${msg_level} == "INFO" ];then
printf "${msg_level}: ${msg_info}\n"
fi if [ ${msg_level} == "WARN" ];then
printf "\033[33m${msg_level}: ${msg_info}\n\033[0m"
fi if [ ${msg_level} == "ERROR" ];then
printf "\033[31m${msg_level}: ${msg_info}\n\033[0m"
fi } prompt_msg "INFO" "INFO"
prompt_msg "WARN" "WARN"
prompt_msg "ERROR" "ERROR"
运行结果:

[ SHELL编程 ] echo和printf使用实例的更多相关文章
- shell之echo and printf
#!/bin/sh _________echo___________#read name #echo "$name It is a test" #read命令从标准的输入中读取一行 ...
- shell 的echo和 printf
shell的echo指令是输出语句 就好比Python的print 在显示字符串的时候可以省略双引号 但是最好还是带上 echo ' Ti is a dashaobing' echo Ti is ...
- shell之echo与printf和颜色
在用户的bashrc中添加一行export来修改提示符.
- shell脚本--echo和printf打印输出
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 注:本文关于引号等特殊符号的处理仅仅只是几个例子,想要彻底搞明 ...
- [ SHELL编程 ] shell编程中数值计算方法实例
SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结.主要包括let.bc.expr.(())等. 1.let 使用格式:let 表达式,表 ...
- shell入门笔记2:字符串、数组、echo与printf
说明: 本文是关于http://c.biancheng.net/cpp/shell/的相关笔记 shell字符串 字符串可以用单引号,也可以用双引号,也可以不用引号. 1 #!/bin/bash 2 ...
- shell echo/read/printf/流程控制章节笔记
// echo read printf 流程控制 命令 1.read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 read hello 输入xxx echo $hell ...
- Shell编程实例
一.简介 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更 ...
- shell编程系列15--文本处理三剑客之awk格式化输出printf
shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...
随机推荐
- mobilehack -转
# mobileHack##工具类网站 [HTML5 与 CSS3 技术应用评估](http://html5please.com/ "html5与css3技术应用评估") [各种奇 ...
- OpenJuege 兔子与星空
总时间限制: 1000ms 内存限制: 10000kB 描述 很久很久以前,森林里住着一群兔子.兔子们无聊的时候就喜欢研究星座.如图所示,天空中已经有了n颗星星,其中有些星星有边相连.兔子们希望删 ...
- (转)打印相关_C#(PrintDocument、PrintDialog、PageSetupDialog、PrintPreviewDialog)
原文地址:http://www.cnblogs.com/smallsoftfox/archive/2012/06/25/2562718.html 参考文章:http://www.cnblogs.com ...
- sql语句中order by 多个字段同时排序的应用
order by 后面可以跟多个字段进行排序 用A1代表第一个字段,A2代表第二个字段 一.order by A1 , A2 desc 指的是用A1升序A2降序 二.order by A1 a ...
- hadoop分布式集群的搭建
电脑如果是8G内存或者以下建议搭建3节点集群,如果是搭建5节点集群就要增加内存条了.当然实际开发中不会用虚拟机做,一些小公司刚刚起步的时候会采用云服务,因为开始数据量不大. 但随着数据量的增大才会考虑 ...
- redis永久化存储
redis持久化存储 原因:redis是存放在内存中的,断电会导致数据丢失解决方法:把redis数据进行持久性存储,将其存储在磁盘中. 存储方式:1.RDBRDB中文名为快照/内存快照,Redis按照 ...
- 查看Selinux和关闭Selinux
查看Selinux和关闭Selinux 注:本文非原创文章,转自以下: 链接:https://www.jianshu.com/p/a7900dbf893c 查看SELinux状态: /usr/sb ...
- JVM总结-字节码
在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数.这个栈帧的大小是提前计算好的,而且 Java 虚拟机 ...
- 自媒体运营排版利器----Markdown here
Markdown Here 下载chrome插件直接下载 使用:打开网页文章编辑器,比如cnblog 用markdown语法写文章,之后点击编译 可以设置好css语法,以后每次可以套用同样的模板 ...
- 可变,不可变与 id 的关系
变量名不能使用关键字: 查看关键字 import keyword keyword.kwlist 可变与不可变: 列表添加元素后,id并不会改变.说明列表可变 元祖添加元素后,id会改变,就不是同一对 ...