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应用进行管 ...
随机推荐
- bzoj2006
论将区间和转化为前缀和的重要性这题一旦转化为前缀和就非常明了了一段区间[l,r]的美妙程度就等于s[r]-s[l-1]对于这种无法计算出所有方案而取前k大的题目,我们一般分类别然后利用类别内的单调性用 ...
- 实战weblogic集群之安装weblogic
一.系统及软件版本 OS版本:Red Hat Enterprise Linux Server release 6.6WebLogic Server 版本: 10.3.3.0JDK版本:1.7.0_79 ...
- 【动态规划】【KMP】HDU 5763 Another Meaning
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763 题目大意: T组数据,给两个字符串s1,s2(len<=100000),s2可以被解读成 ...
- 如何解决升级WIN服务的时候,不暴力停止服务 达到升级的目的
同一个WIN服务,分别部署在A.B两台服务器上,前面使用netscaler负载均衡 ,A和B被请求频繁,几乎时时刻刻都被请求 .PS:发布WIN服务的正常流程是,停止WIN服务->发布WIN ...
- 如何在COM的IDL文件中include头文件?
可以使用import语句,如import "x.h"; 则在自动生成的xxx_i.h中将会有include "x.h", 于是x.h就被include到工程中了 ...
- JavaScript 调试常见报错以及修复方法
(看到一篇调试JS很有用的文章,收藏一下) JavaScript 调试是一场噩梦:首先给出的错误非常难以理解,其次给出的行号不总有帮助.有个查找错误含义,及修复措施的列表,是不是很有用? 以下是奇怪的 ...
- legoblock秀上限
很久没有做题了,前天做了一道题结果弱的一逼...搜了解题报告不说...还尼玛秀了上限 题意: 给出宽和高为n和m的一堵墙,手上有长为1,2,3,4高均为1的砖,问形成一个坚固的墙有多少种做法. 坚固的 ...
- ConcurrentHashMap 原理分析
1 为什么有ConcurrentHashMap hashmap是非线程安全的,hashtable是线程安全的,但是所有的写和读方法都有synchronized,所以同一时间只有一个线程可以持有对象,多 ...
- QQ群成员提取
var ids = document.querySelectorAll(".member_id"); var names = document.querySelectorAll(& ...
- halt和shutdown 的区别
1.halt -h 标准情况下是关机 但是要手动关闭电源 .有些发行版增强了halt脚本 使其可以关闭电源 halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核. 2. ...