深入理解Bash中的尖括号(适合初学者)

 更新时间:2019年02月13日 09:16:24   作者:Paul Brown  
这篇文章主要给大家介绍了关于Bash中尖括号的相关资料,本文非常适合初学者,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

Bash 内置了很多诸如 ls、cd、mv 这样的重要的命令,也有很多诸如 grep、awk、sed 这些有用的工具。但除此之外,其实 Bash 中还有很多可以起到胶水作用的标点符号,例如点号(.)、逗号(,)、括号(<>)、引号(”)之类。下面我们就来看一下可以用来进行数据转换和转移的尖括号(<>)。

转移数据

如果你对其它编程语言有所了解,你会知道尖括号 < 和 > 一般是作为逻辑运算符,用来比较两个值之间的大小关系。如果你还编写 HTML,尖括号作为各种标签的一部分,就更不会让你感到陌生了。

在 shell 脚本语言中,尖括号可以将数据从一个地方转移到另一个地方。例如可以这样把数据存放到一个文件当中:

ls > dir_content.txt

在上面的例子中,> 符号让 shell 将 ls 命令的输出结果写入到 dir_content.txt 里,而不是直接显示在命令行中。需要注意的是,如果 dir_content.txt 这个文件不存在,Bash 会为你创建;但是如果 dir_content.txt 是一个已有的非空文件,它的内容就会被覆盖掉。所以执行类似的操作之前务必谨慎。

你也可以不使用 > 而使用 >>,这样就可以把新的数据追加到文件的末端而不会覆盖掉文件中已有的数据了。例如:

ls $HOME > dir_content.txt; wc -l dir_content.txt >> dir_content.txt

在这串命令里,首先将家目录的内容写入到 dir_content.txt 文件中,然后使用 wc -l 计算出 dir_content.txt 文件的行数(也就是家目录中的文件数)并追加到 dir_content.txt 的末尾。

在我的机器上执行上述命令之后,dir_content.txt 的内容会是以下这样:

Applications
bin
cloud
Desktop
Documents
Downloads
Games
ISOs
lib
logs
Music
OpenSCAD
Pictures
Public
Templates
test_dir
Videos
17 dir_content.txt

你可以将 > 和 >> 作为箭头来理解。当然,这个箭头的指向也可以反过来。例如,Coen brothers (LCTT 译注:科恩兄弟,一个美国电影导演组合)的一些演员以及他们出演电影的次数保存在 CBActors 文件中,就像这样:

John Goodman 5
John Turturro 3
George Clooney 2
Frances McDormand 6
Steve Buscemi 5
Jon Polito 4
Tony Shalhoub 3
James Gandolfini 1

你可以执行这样的命令:

sort < CBActors
Frances McDormand 6 # 你会得到这样的输出
George Clooney 2
James Gandolfini 1
John Goodman 5
John Turturro 3
Jon Polito 4
Steve Buscemi 5
Tony Shalhoub 3

就可以使用 sort 命令将这个列表按照字母顺序输出。但是,sort 命令本来就可以接受传入一个文件,因此在这里使用 < 会略显多余,直接执行 sort CBActors 就可以得到期望的结果。

如果你想知道 Coens 最喜欢的演员是谁,你可以这样操作。首先:

while read name surname films; do echo $films $name $surname > filmsfirst.txt; done < CBActors

上面这串命令写在多行中可能会比较易读:

while read name surname films;\\
do
echo $films $name $surname >> filmsfirst;\\
done < CBActors

下面来分析一下这些命令做了什么:

  • while …; do … done 是一个循环结构。当 while 后面的条件成立时,do 和 done 之间的部分会一直重复执行;
  • read 语句会按行读入内容。read 会从标准输入中持续读入,直到没有内容可读入;
  • CBActors 文件的内容会通过 < 从标准输入中读入,因此 while 循环会将 CBActors 文件逐行完整读入;
  • read 命令可以按照空格将每一行内容划分为三个字段,然后分别将这三个字段赋值给 name、surname 和 films 三个变量,这样就可以很方便地通过 echo $films $name $surname >> filmsfirst;\\ 来重新排列几个字段的放置顺序并存放到 filmfirst 文件里面了。

执行完以后,查看 filmsfirst 文件,内容会是这样的:

5 John Goodman
3 John Turturro
2 George Clooney
6 Frances McDormand
5 Steve Buscemi
4 Jon Polito
3 Tony Shalhoub
1 James Gandolfini

这时候再使用 sort 命令:

sort -r filmsfirst

就可以看到 Coens 最喜欢的演员是 Frances McDormand 了。(-r 参数表示降序排列,因此 McDormand 会排在最前面)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对华域联盟的支持。

相关文章

  • Apache中解决动态地址跳转死循环的方法

    Apache中解决动态地址跳转死循环的方法

    这篇文章主要介绍了Apache中解决动态地址跳转死循环的方法,另外作者还提出了尽量使用伪静态的建议,需要的朋友可以参考下

    2015-07-07

  • Linux系统使用Fuser命令的方法

    Linux系统使用Fuser命令的方法

    fuser命令是一个非常聪明的unix实用程序,用于查找正在使用某个文件、目录或socket的进程。这篇文章主要介绍了Linux系统使用Fuser命令的方法,需要的朋友可以参考下

    2020-06-06

  • Linux下实现免密码登录(超详细)

    Linux下实现免密码登录(超详细)

    这篇文章主要介绍了Linux下实现免密码登录的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧

    2016-10-10

  • OneinStack一键安装PHP/JAVA/HHVM和超详细的VPS手动安装LNMP的方法

    OneinStack一键安装PHP/JAVA/HHVM和超详细的VPS手动安装LNMP的方

    OneinStack一键工具提供多个Tomcat版本(Tomcat-8,Tomcat-7) 和多个JDK版本(JDK-1.8,JDK-1.7,JDK-1.6),支持CentOS 6、7下HHVM安装。如果还有为无法成功配置好Java或者HHVM环境而烦恼的话,OneinStack就可以助你一臂之力

    2017-07-07

  • ubuntu14.04安装jdk1.8的教程

    ubuntu14.04安装jdk1.8的教程

    这篇文章主要介绍了ubuntu14.04安装jdk1.8的教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    2019-09-09

  • 微信小程序 Linux开发环境设置详解

    微信小程序 Linux开发环境设置详解

    这篇文章主要介绍了微信小程序 Linux开发环境设置详解的相关资料,需要的朋友可以参考下

    2017-01-01

  • centos 7中设置tomcat 7为系统服务的方法详解

    centos 7中设置tomcat 7为系统服务的方法详解

    这篇文章主要给大家介绍了关于在centos 7中设置tomcat 7为系统服务的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来跟着小编一起学习学习吧。

    2017-06-06

  • Linux中top命令输出详解

    Linux中top命令输出详解

    这篇文章主要给大家介绍了关于Linux中top命令输出的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux系统具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    2019-07-07

  • Ubuntu下Telnet服务器的配置方法

    Ubuntu下Telnet服务器的配置方法

    这篇文章主要介绍了Ubuntu下Telnet服务器的配置方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    2016-11-11

  • linux下配置yum源方法详解

    linux下配置yum源方法详解

    本篇文章主要介绍了linux下配置yum源方法详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    2016-12-12

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。