Linux Chaining Operators顾名思义,就是连接命令的操作,有些时候,往往一些命令可以用一行命令代替,我们就不需要大动干戈再去写Shell Script了,掌握和学习这些Chaining Operatos可以让你的学习和生活事半功倍,今天,我就给大家介绍一些,我个人觉得有用的tricks.

1.先给大家来个重量级的非操作-- ! ,对,就是C++中的非操作,可能很多人跟我一样以前没怎么用过非操作在shell里,我先给大家看个demo

touch a.txt b.txt c.txt d.txt e.txt f.txt

首先我们创建了6个txt,有时候会有需求说我只需要留下c.txt,其他的我都不要,我一开始比较笨的方法可能是先把c.txt移走,然后再整个删除文件夹。这个时候真正有用的非操作就来了。我们只需要

rm !(c.txt)

即把除了c.txt之外的其他txt都给删除了,同样,非操作也使用于适配符,比如

touch a.txt b.txt c.txt d.html e.html

我们想留下所有的html,其实只需要

rm !(*.txt)

就可以了 。

2.后台命令 & -- 有时候需要程序后台进行,即让firefox输入之后不要阻塞当前shell,这样你可以继续执行别的命令

firefox &

3. 分号操作符 ; -- 当我们希望在一行上执行多个命令的时候我们可以利用;来将这些命令连起来,但这个时候要注意,它不会根据前面的命令成功与失败来判断,要根据判断参考下文

touch a.txt; cat a.txt

此时虽然touch和cat是连续执行,但如果你touch失败,cat还是会执行下去,要用到确认前面结果我们可以用下面的连接符。

4. 与操作符 && -- 当我们希望第一个命令必须执行成功之后,再执行第二个命令的时候,我们就可以用到这个命令

touch a.txt && cat a.txt

只有在touch成功返回0的时候,我们才继续执行a.txt

5. 或操作符 || --  同样有验证失败的操作符,即在前一个命令运行失败之后我后面的命令才执行

cd temp || mkdir temp

如果我cd temp失败了,说明当前路径没有temp文件夹,这个时候我再进行创建temp操作。

6. 与或操作符 && || -- 可以达成我们C语言中if...else...的效果

cd temp && cat a.txt || mkdir temp

进入temp,成功就获取a.txt,失败就先创建temp

7. 大括号 {} -- 有时候,我们希望一组命令成对执行,即包括在统一的逻辑判断中,不需要分开来

[ -f /opt/a.txt ] || echo “The file does not exist”; touch /opt/a.txt

如果我们这么写,那么,如论a.txt是否存在,我的touch都会执行,所以我们可以用大括号来进行操作

[ -f /opt/abc.txt ] || { echo “The file does not exist”; touch /opt/abc.txt; }

这样只有在a.txt成功之后,我后面的两个命令才会执行,即把他们封装成了一个集合体,注意:类似于这种集合语句的封装除了用大括号之外也可以用小括号(),但两者还是有区别的,首先,如果你要用大括号,你大括号中最后一个命令的后面必须有个非号,其次你要保证大括号的头都预留一个空格出来(尾不强求),不然bash会报错。而小括号没有这个限制。另外一点,用小括号运行的命令会集中进入sub-shell,即子shell执行,这个时候你在子shell中修改了环境变量等等,都不会改变当前shell的环境变量。而如果你用的大括号,即在当前shell环境下修改了环境变量,会直接影响到当前的父环境(也可以参考,当修改了bashrc之后,用source或者.会立即起作用,而用./脚本名或者sh操作只会创建子进程执行而不会影响当前父shell的环境变量)

8. 小括号() -- 优先权操作符,除了上面讲到的封装的一个逻辑体之外,()还有一个优先权操作符的功能

command1 && command2 || command3 && command4

当command1执行成功之后只会执行command2,此时command3和command4的并不会执行,如果不想浪费时间,比如,只要command1失败了,我后面的command3和command4就不想执行了,只需要

( caommand1 && command2 ) || ( command3 && command4 )

即可完成这种效果。注意:也可以用大括号,但必须注意空格和分好问题

{ caommand1 && command2;} || { command3 && command4;}

同时也需要跟上文一样考虑,sub-shell和当前shell,小括号和大括号区别的问题。

9. 斜杠 \ -- 当用户命令输入过程时可以用到这个操作符

touch a.txt \
echo "Hello" > \
a.txt

10. 管道符 | -- 这个操作符相信大家都非常熟悉了,就是把前一个命令的输出结果作为下一个命令的输入结果

ls | grep test

这就是Ricky给大家带来的China Operators用法,希望大家会喜欢这篇文章,留下你的脚印,给我点鼓励,谢谢。

参考链接:1. http://www.tecmint.com/chaining-operators-in-linux-with-practical-examples/

2. http://www.linuxnix.com/2012/07/23-awesome-less-known-linuxunix-command-chaining-examples.html

3. 鸟哥的Linux私房菜 基础学习篇

Linux Chaining Operators用法学习的更多相关文章

  1. 亲爱的,我是一条Linux运维技术学习路径呀。

    根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...

  2. php_codesninffer phpcs用法学习使用:

    18:34 2016/1/12php_codesninffer phpcs用法学习使用:可以加一个参数设置结果输出为各种格式:如source格式:$ phpcs -s --report=source ...

  3. (转) linux之sort用法

    sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式: sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序. 参 数 ...

  4. Linux网络编程&内核学习

    c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...

  5. linux mail命令用法

    在Linux系统下mail命令的测试 1. 最简单的一个例子: mail -s test admin@aispider.com 这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并 ...

  6. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  7. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

  8. Tomcat详细用法学习(三)

    本篇接上一篇<Tomcat详细用法学习(二)>,主要讲解服务器所要求的web应用的组织结构. 上一篇说到了如何使用服务器将自己的web应用映射成虚拟目录,以便于在浏览器中可以对自己开发的w ...

  9. Tomcat详细用法学习(五)

    本篇接上一篇<Tomcat详细用法学习(四)>,主要讲解Tomcat服务器的管理平台 我们可能会将很多web应用交给Tomcat,那么Tomcat服务器就要对我们这些载入的web应用进行管 ...

随机推荐

  1. 吉哥系列故事――临时工计划(dp)

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Descr ...

  2. 【Animations】

    这个比较高端了!CSS3动画帧数科学计算法 基于css的3d和动画 基于css的3d和动画(2) 如何使用JavaScript控制CSS Animations(动画)和Transitions(过渡) ...

  3. Android从网络中获取xml文件并解析数据

    public class XmlwebData { @SuppressLint("UseValueOf") public static List<Person> get ...

  4. HDU1247 Hat’s Words(Trie的动态内存版本)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  5. [Locked] 3Sum Smaller

    3Sum Smaller Given an array of n integers nums and a target, find the number of index triplets i, j, ...

  6. Appium移动自动化测试(三)--安装Android模拟器(转)

    Appium移动自动化测试(三)--安装Android模拟器 2015-06-08 10:33 by 虫师, 30828 阅读, 9 评论, 收藏, 编辑 当Android SDK安装完成之后,并不意 ...

  7. erlang mnesia数据库设置主键自增

    Mnesia是erlang/otp自带的分布式数据库管理系统.mnesia配合erlang的实现近乎理想,但在实际使用当中差强人意,总会有一些不足.mnesia数据表没有主键自增的功能,但在mnesi ...

  8. Eclipse连接SVN服务器

    (1)安装 eclipse SVN 插件      插件名称 site-1.4.8.zip      Help --> SoftwareUpdates --->Find and Insta ...

  9. [AWS] Install the AWS cli

    On Windows, just download the installer and install it. Configure: aws configure In your aws console ...

  10. Android之开发常用颜色

    Android开发中常常要用一些个性化的颜色,然而茫茫的RBG颜色对照表,往往给人眼花缭乱的感觉,更别说从中轻易选出一两种比较满意的颜色,下面我就总结一下开发中常用到的比较绚丽的颜色,都是有名有姓的哦 ...