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. HDNOIP201206施工方案

    HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...

  2. Safecracker(搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1015 / 题意; 从所给的一串字符串中选出5个字母假如是(A B C D E)使得A-B^2+C^3-D^4+E ...

  3. Theme Section - HDU 4763(KMP)

    题目大意:给你一个串,从这个串里面找出一个前缀后缀中间相等的串的最大长度也就是 EAEBE,每个字母都代表一个串,E出现了三次,找出最长的那个E.   分析:我们知道KMP里面保存的就是前缀和后缀的最 ...

  4. iOS状态栏颜色

    下面截图给出修改 iOS 状态栏颜色的 4 种方式 Target.png Info.plist.png Storyboard.png code.png 其中第四张图中的代码,直接写在你的任何一个 Vi ...

  5. FC和SCSI

    IDE(Integrated Drive Electronics)即"电子集成驱动器",它的本意是指把"硬盘控制器"与"盘体"集成在一起的硬 ...

  6. 作业.把c语言输出的基础差不多都概括了!

    // (1)1英里=1.60931公里,从键盘上输入英里数输出公里数 #include "stdio.h" #define PI 3.1415926 #include " ...

  7. iOS开发zhiATM机的设计与实现

    // // main.m // ATM // #import <Foundation/Foundation.h> #import "ATM.h" #import &qu ...

  8. Swoole源代码学习记录(十五)——Timer模块分析

    swoole版本号:1.7.7-stable Github地址:点此查看 1.Timer 1.1.swTimer_interval_node 声明: // swoole.h 1045-1050h ty ...

  9. [Javascript] Advanced Console Log Arguments

    Get more mileage from your console output by going beyond mere string logging - log entire introspec ...

  10. raknet unity3d

    Raknet是一高性能的跨平台的网络库. 他主要基于UDP实现,性能非常好,能够做server. 鉴于unity3d较差的网络支持. 本人成功实现了raknet c# for unity3d的使用,s ...