shell重温---基础篇(printf命令&test命令)
在shell中还有一个输出的命令,那就是printf了。它模仿的是C程序库(library)里的printf()程序,是由POSIX标准所定义,所以嘞,使用printf脚本比echo移植性要好一点,它使用引用文本或空格分隔的参数,外面可以在printf使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等,默认printf不会像echo自动添加换行符,但可以手动添加\n。以上就是官方解释,接下来,记录一下它的语法格式:
- printf format-string [arguments...]
参数说明:
- format-string: 为格式控制字符串
- arguments: 为参数列表。
实例如下:
- $ echo "Hello, Shell"
- Hello, Shell
- $ printf "Hello, Shell\n"
- Hello, Shell
- $
接下来,看一个比较不错的脚本:
- #!/bin/bash
- printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
- printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
- printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
- printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
#%s %c %d %f都是格式替代符
#%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
#%-4.2f 指格式化为小数,其中.2指保留2位小数。
然后是运行结果:
- 姓名 性别 体重kg
- 郭靖 男 66.12
- 杨过 男 48.65
- 郭芙 女 47.99
还有一些实例给大家介绍下:
- #!/bin/bash
- # format-string为双引号
- printf "%d %s\n" 1 "abc"
- # 单引号与双引号效果一样
- printf '%d %s\n' 1 "abc"
- # 没有引号也可以输出
- printf %s abcdef
- # 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
- printf %s abc def
- printf "%s\n" abc def
- printf "%s %s %s\n" a b c d e f g h i j
- # 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
- printf "%s and %d \n"
运行上面的脚本,得出的结果如下:
- 1 abc
- 1 abc
- abcdefabcdefabc
- def
- a b c
- d e f
- g h i
- j
- and 0
printf它还有个转义序列:
序列 | 说明 |
---|---|
\a | 警告字符,通常为ASCII的BEL字符 |
\b | 后退 |
\c | 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略 |
\f | 换页(formfeed) |
\n | 换行 |
\r | 回车(Carriage return) |
\t | 水平制表符 |
\v | 垂直制表符 |
\\ | 一个字面上的反斜杠字符 |
\ddd | 表示1到3位数八进制值的字符。仅在格式字符串中有效 |
\0ddd | 表示1到3位的八进制值字符 |
废话不多说,给大家看一下实例:
- $ printf "a string, no processing:<%s>\n" "A\nB"
- a string, no processing:<A\nB>
- $ printf "a string, no processing:<%b>\n" "A\nB"
- a string, no processing:<A
- B>
- $ printf "www.przl.com \a"
- www.przl.com $ #不换行
记录到这里,printf就差不多介绍完事了,再来就是test命令了。test命令通常用来检查某个条件是否成立,可以进行数字、字符、文件三个方面的检测。先来看一下数字检测:
参数 | 说明 |
---|---|
-eq | 等于则为真 |
-ne | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于等于则为真 |
看一下实例:
- num1=100
- num2=100
- if test $[num1] -eq $[num2]
- then
- echo '两个数相等!'
- else
- echo '两个数不相等!'
- fi
输出的结果如下所示:
- 两个数相等!
代码中的[]执行基本的算术运算,如:
- #!/bin/bash
- a=5
- b=6
- result=$[a+b] # 注意等号两边不能有空格
- echo "result 为: $result"
结果为:
- result 为: 11
再来就是字符串方面的检测:
参数 | 说明 |
---|---|
= | 等于则为真 |
!= | 不相等则为真 |
-z 字符串 | 字符串的长度为零则为真 |
-n 字符串 | 字符串的长度不为零则为真 |
看一下实例:
- num1="przl"
- num2="przl1314"
- if test $num1 = $num2
- then
- echo '两个字符串相等!'
- else
- echo '两个字符串不相等!'
- fi
输出的结果就是:
- 两个字符串不相等!
还有就是文件方面的检测:
参数 | 说明 |
---|---|
-e 文件名 | 如果文件存在则为真 |
-r 文件名 | 如果文件存在且可读则为真 |
-w 文件名 | 如果文件存在且可写则为真 |
-x 文件名 | 如果文件存在且可执行则为真 |
-s 文件名 | 如果文件存在且至少有一个字符则为真 |
-d 文件名 | 如果文件存在且为目录则为真 |
-f 文件名 | 如果文件存在且为普通文件则为真 |
-c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
-b 文件名 | 如果文件存在且为块特殊文件则为真 |
实例演示:
- cd /bin
- if test -e ./bash
- then
- echo '文件已存在!'
- else
- echo '文件不存在!'
- fi
结果就是:
- 文件已存在!
另外呢,shell还提供了:与(-a)、或(-o)、非(!)三个逻辑操作符用于将测试条件连接起来,其优先级为:!最高,-a次之,-o最次。实例:
- cd /bin
- if test -e ./notFile -o -e ./bash
- then
- echo '至少有一个文件存在!'
- else
- echo '两个文件都不存在'
- fi
运行上述代码,结果为:
- 有一个文件存在!
OK,今天的笔记就到这里了,希望大家会喜欢。最后,祝大家事事顺心哈。。。
原文链接:https://blog.csdn.net/luyaran/article/details/79384865
shell重温---基础篇(printf命令&test命令)的更多相关文章
- shell重温---基础篇(参数传递&echo命令)
经过前两天的学习,关于shell的基础算是知道的一般般啦,最起码不算是小白了(纯属意淫).今天就来点干货哈. 首先是运行shell脚本时的参数传递.脚本内获取参数的格式为$n.n代表了一个数字,例 ...
- shell重温---基础篇(shell变量&字符串以及git GUI运行shell脚本方式)
既然是基础篇那肯定是需要对shell的各种需要注意的基本点进行说明了.接下来就是show time... shell呢,是一个用C语言编写的应用程序,是用户使用linux的桥梁.所以呢,他既是一 ...
- shell重温---基础篇(流程控制&if判断&for&while&循环操作)
和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { search( ...
- shell重温---基础篇(shell数组&数组操作)
上篇博客已经分析重温了shell的运行方式以及其中的变量还有字符串,之后按照套路就是数组方面了,废话不多说,直接进入正题哈.(小白笔记,各位看官勿喷...) bash shell呢,支持一位数 ...
- shell重温---基础篇(函数操作)
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.shell中函数的定义格式如下: [ function ] funname [()] { action; [ret ...
- shell重温---基础篇(输入/输出重定向)
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准 ...
- shell重温---基础篇(文件包含)
和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件.Shell 文件包含的语法格式如下: . filename # 注意点号(.)和文件名中间 ...
- shell重温---基础篇(连接数据库)
前几天分享了shell字符串操作,数组操作等,接下来回归到项目,进行数据库操作.按照一般情况来说,shell连接数据库基本上都是DB使用的,因为需要运行大量的sql啊什么的,所以都会封装到shell中 ...
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
随机推荐
- VC++动态链接库(DLL)编程
一.概论 1:http://www.pconline.com.cn/pcedu/empolder/gj/vc/0509/698632.html 2:http://pcedu.pconline.com. ...
- May 21st 2017 Week 21st Sunday
The smallest deed is better than the greatest intention. 最微小的行动胜过最伟大的打算. Several years ago, just aft ...
- March 17 2017 Week 11 Friday
Simplicity is the ultimate sophistication. 简约才是精巧到了极致. Recently I have spent a great number of time ...
- OpenGL总结
最近2D转向3D,也从固定管线转到了可编程管线,有些细节的东西记录一下. Geometry Shader Geometry Shader从Vertex Shader中获取数据,向Fragment Sh ...
- CRM和ERP的Sales Organization的映射关系
在如下的配置里可以维护CRM和ERP的Sales Organization的映射关系. 例如,ERP的编号为0001的销售组织映射到CRM的编号为O 50040102的销售组织: 这种映射关系存储在表 ...
- ASP.NET MVC有用工具
Route Debugger https://www.nuget.org/packages/routedebugger 在Asp.Net MVC程序中,路由(Route)是一个非常核心的概念,可以说是 ...
- eclipse properties 文件查看和编辑插件
*.properties属性文件,如果文件中包含中文,会出现乱码.为了解决这个问题,可以为Eclipse安装Properties Editor插件解决这个问题. 步骤 1 安装Properties ...
- C#位数不足补零
C#位数不足补零:int i=10;方法1:Console.WriteLine(i.ToString("D5"));方法2:Console.WriteLine(i.ToString ...
- lucene&solr学习——分词器
下图是语汇单元的生成过程: 从一个Reader字符流开始,创建基于Reader的Tokenizer分词器,经过三个TokenFilter生成语汇单元Tokens. 要看分词器的分析效果,只需要看Tok ...
- 关闭Debut.Log
unity5.3支持了运行时关闭产生的debug.log Debug.logger.logEnabled = false; 谢谢你们,让我能在晚上凝视夜空的时候,脑海中浮现出更广阔的世界.