Linux Chaining Operators用法学习
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用法学习的更多相关文章
- 亲爱的,我是一条Linux运维技术学习路径呀。
根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...
- php_codesninffer phpcs用法学习使用:
18:34 2016/1/12php_codesninffer phpcs用法学习使用:可以加一个参数设置结果输出为各种格式:如source格式:$ phpcs -s --report=source ...
- (转) linux之sort用法
sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式: sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序. 参 数 ...
- Linux网络编程&内核学习
c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...
- linux mail命令用法
在Linux系统下mail命令的测试 1. 最简单的一个例子: mail -s test admin@aispider.com 这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并 ...
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Unix和Linux下C语言学习指南
转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...
- Tomcat详细用法学习(三)
本篇接上一篇<Tomcat详细用法学习(二)>,主要讲解服务器所要求的web应用的组织结构. 上一篇说到了如何使用服务器将自己的web应用映射成虚拟目录,以便于在浏览器中可以对自己开发的w ...
- Tomcat详细用法学习(五)
本篇接上一篇<Tomcat详细用法学习(四)>,主要讲解Tomcat服务器的管理平台 我们可能会将很多web应用交给Tomcat,那么Tomcat服务器就要对我们这些载入的web应用进行管 ...
随机推荐
- C# 精准获取代码运行时间
纯粹转载,转载请注明参考链接及作者! 参考链接:http://www.cnblogs.com/ret00100/archive/2010/08/06/1793680.html,作者:博客园 大佬辉 ...
- hdu-2768-Cat vs. Dog(二分图-最大匹配数)
题意: 有猫C个和狗D个,有V个投票人,每个人喜欢猫讨厌狗或则喜欢狗讨厌猫! 求最多能满足多少投票人. 分析: 两个投票者矛盾的话就连一条边,总数减去最大匹配数/2就是要求的答案 // File Na ...
- Redis Sentinel实现Failover
redis版本:2.8.17 服务器规划: 10.50.13.34(6379 master) 10.50.13.35(6379 slave) 10.50.13.36(6379 slave) 10. ...
- 数学(矩阵乘法,随机化算法):POJ 3318 Matrix Multiplication
Matrix Multiplication Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17783 Accepted: ...
- How to distribute your own Android library through jCenter and Maven Central from Android Studio
In Android Studio, if you wish to include any library to your application. You could just simply add ...
- bzoj1208 [HNOI2004]宠物收养所(STL,Treap)
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5956 Solved: 2317[Submit][Sta ...
- 《Qt编程的艺术》——8.2.1 在Designer中使用View类
不幸的是,QDirModel有一个严重的限制:因为view不响应鼠标操作,我们不得不自己建立这些功能.除此之外,每个view中,用户都一次只能选择一个元素.如果你想要允许同时选择多个项目,你也必须自己 ...
- XPath总结(转)
XPath简介 XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.目前有XPath1.0和XPath2.0两个版本.其中Xpath1.0是199 ...
- Java中基本数据类型和包装器类型的关系
在程序设计中经常用到一系列的数据类型,在Java中也一样包含八中数据类型,这八种数据类型又各自对应一种包装器类型.如下表: 基本类型 包装器类型 boolean Boolean char Charac ...
- flume-ng 使用spool source 传输文件到hdfs
Flume 1.4.0 User Guide 地址:http://archive.cloudera.com/cdh4/cdh/4/flume-ng-1.4.0-cdh4.6.0/FlumeUserGu ...