多命令顺序执行与管道符
一、多命令顺序执行
1、多命令执行符号’;’
命令格式:命令1;命令2
作用:多个命令顺序执行,命令之间没有任何逻辑联系,只不过是为了简化操作而已。
例如:
[root@localhost ~]# ls ; date ; cd /user ; pwd
这就是多个命令放到一起顺序执行的例子,而且有一条命令cd命令是错的,因为根下没有user这个目录,但就算是有错误,他也一样会执行,如图:

也就是说用这个连接符号可以把多条命令放到一起顺序执行,无论命令是否正确都会正常执行所有命令。
这个方式在用dd命令的时候很方便,如下:
[root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看作一个数据块
count=个数 指定输入/输出多少个数据块
那么dd命令是做什么用的呢?其实他也是一个复制命令,但和cp是不同的,dd命令不但可以复制文件,还可以复制磁盘硬件设备,也就说用dd命令可以把两块磁盘进行对拷。
我们来看个示例:
[root@localhost ~]# date; dd if=/dev/zero of=/root/testfile bs=1k count=100000; date
这个命令的执行过程就是,先输出时间,然后用dd复制命令把/dev/zero的文件内容一直向/root/testfile里面进行复制,每次复制的大小为1k,然后复制100000次,那么bs=1k,那么count=100000bs=100m。也就是到100m后停止,并且再次输出date。
这么执行可以知道我们创建了100m的文件用了多长时间。
好我们来执行一下试试,如图:

而我们如果是进行磁盘对拷的话,如下:
[root@localhost ~]# date ; dd if=/dev/sda of=/dev/sdb ; date
这样即可,最后还能显示我们最终用来多长时间复制一个硬盘。
也就是说分号的作用无非就是连接多个命令来顺序执行而已。用途就是上面的dd命令会用到一些。
2、多命令执行符号’&&’
格式:命令1&&命令2
作用:逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
这个执行符号我没在讲安装源码包编译的时候学习过。
比如:
[root@localhost ~]# ./configure && make && make install
这样就可以直接进行配置安装,编译,和安装编译同时进行,而不必要一个一个的来进行执行了,执行过程中只要前面有报错的就直接会停止。
我们举个简单的例子:
[root@localhost ~]# ls && echo yes
也就是是ls命令正常,然后就输出yes。而
[root@localhost ~]# ls sass && echo yes
就不会输出yes,因为前面的命令已经错了,如图:

这就是逻辑与的作用。
常用于具有逻辑与关系的命令,就比如用源码包的方式安装程序就如此。
3、多命令执行符号’||’
格式:命令1||命令2
作用:逻辑或
当命令1执行不正确,则命令2才会执行
当命令1正确执行了,命令2就不会再执行。
直接举例说明:
[root@localhost ~]# lst || echo no
这样第一个命令错了,但是第二个命令还是会输出。
[root@localhost ~]# ls || echo no
而这样第一命令正确,第二个命令反而不会输出了,因为是或关系,只要有一个正确执行就不会再输出其他的命令。
如图:

4、我们可以利用逻辑与和逻辑或的特性来检测一个命令是否正确。
[root@localhost ~]# 命令 && echo yes || echo no
这样这条命令如果正确就会继续执行echo yes输出yes,而因为和echo no是或逻辑,既然前面正确输出了,后面就不会执行输出no了。
而如果这个命令是错误的,那么就不会继续执行echo yes,但是与后面的echo no是或逻辑,所以就会输出no来进行报错。
比如:
[root@localhost ~]# ls -l && echo yes || echo no
[root@localhost ~]# ls l && echo yes || echo no
这样第一条命令输出yes,第二条就输出no,如图:

二、管道符
1、命令格式
[root@localhost ~]# 命令1 | 命令2
命令1的正确输出作为命令2的操作对象。也就是命令2会执行命令1输出的结果。
举个例子,比如:
[root@localhost ~]# ll -a /etc
ll=ls-l,-a显示所有
也就是显示etc目录下的所有文件,大家自己试试看,这个目录下的文件可是太多了,一页都显示不完,想找我们想要的文件很费劲,可能我们只想查看某一个文件,但是他给显示出一大堆来,最主要的我们只看到最后一页,前面的内容都无法看到。
大家可能会想到这么写:
[root@localhost ~]# more /etc/ | more
用分页命令more,但是不要搞错,more只能给文件的内容进行分页显示,是不能直接分屏显示命令的结果的。
那么这里就用到管道符了,他就可以解决这个问题,如下:
[root@localhost ~]# ll -a /etc/ | more
也就是说用more命令执行ll的执行结果,那自然是把ll -a的结果进行分页显示了。就这么简单。
但是管道符有一个强制的要求,也就是命令1必须是正确的输出,命令2才会执行。
好的,我们再举一个例子:
[root@localhost ~]# netstat -an
netstat -an 我们学过,是查询所有的网络连接。
如图:

命令执行完出现了这么多信息,而我们其实只需要查看正在连接着的终端或设备,剩下的好多信息我们不想看,那么我们就可以用管道符来实现了。
[root@localhost ~]# netstat -an | grep “ESTABLISHED”
也就是用grep命令来找出只有ESTABLISHED字符串的字段。
grep命令我们前面学习过,是个内容匹配搜素命令,也就是在文件里搜索具有某个字符串关联的行,这里再介绍一下:
[root@localhost ~]# grep [选项] "搜索内容" 文件名 选项: -i 忽略大小写 -n 输出行号 -v 反向查找,比如只要是有注释符'#'号的行都不显示。 --color=auto 搜索出的关键字高亮显示
123456 [root@localhost ~]# grep [选项] "搜索内容" 文件名 选项: -i 忽略大小写 -n 输出行号 -v 反向查找,比如只要是有注释符'#'号的行都不显示。 --color=auto 搜索出的关键字高亮显示
。
比如我们查看/etc/passwd文件里面的内容,但是里面内容太多,我们只想查看和root有关的内容,我们就可以这么写:
[root@localhost ~]# grep “root” /etc/passwd
如图:

这样就只输出了含有root字符串的行,而不用我们到文件里一行一行的去找了。
详细内容查看这篇教程:http://www.ql2015.cn/lamp/linux/534.html
那么说回来了,grep只能查看某个文件里相关字符的内容,而上面说的netstat -an是命令执行的结果,是不能直接用grep查看的,就相当于不能直接用more分页显示某个命令的执行结果一样,那么既然可以用管道符+more来实现分页显示命令的结果,自然也可以用管道符来查看netstat -an的执行结果,如下:
[root@localhost ~]# netstat -an | grep “ESTABLISHED”
这样一来就把和ESTABLISHED字符串有关的给显示出来了,而其他的就不会显示。
ESTABLISHED代表连接标识。
如图:

这就是管道符的作用,用起来非常有意思,非常灵活,以后也会经常用到,所以建议大家一定要熟练理解操作。
本节主要讲到命令顺序连接符’;’,逻辑与命令连接符’&&’,逻辑或命令连接符’||’,管道符’|’,都是经常要用到的,大家一定要熟练掌握。
本教程原创作者:mageo,出自每集博客,尊重作者劳动,转载请注明出处:ql2015.cn,谢谢!
一、多命令顺序执行
1、多命令执行符号’;’
命令格式:命令1;命令2
作用:多个命令顺序执行,命令之间没有任何逻辑联系,只不过是为了简化操作而已。
例如:
[root@localhost ~]# ls ; date ; cd /user ; pwd
这就是多个命令放到一起顺序执行的例子,而且有一条命令cd命令是错的,因为根下没有user这个目录,但就算是有错误,他也一样会执行,如图:

也就是说用这个连接符号可以把多条命令放到一起顺序执行,无论命令是否正确都会正常执行所有命令。
这个方式在用dd命令的时候很方便,如下:
[root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看作一个数据块
count=个数 指定输入/输出多少个数据块
那么dd命令是做什么用的呢?其实他也是一个复制命令,但和cp是不同的,dd命令不但可以复制文件,还可以复制磁盘硬件设备,也就说用dd命令可以把两块磁盘进行对拷。
我们来看个示例:
[root@localhost ~]# date; dd if=/dev/zero of=/root/testfile bs=1k count=100000; date
这个命令的执行过程就是,先输出时间,然后用dd复制命令把/dev/zero的文件内容一直向/root/testfile里面进行复制,每次复制的大小为1k,然后复制100000次,那么bs=1k,那么count=100000bs=100m。也就是到100m后停止,并且再次输出date。
这么执行可以知道我们创建了100m的文件用了多长时间。
好我们来执行一下试试,如图:

而我们如果是进行磁盘对拷的话,如下:
[root@localhost ~]# date ; dd if=/dev/sda of=/dev/sdb ; date
这样即可,最后还能显示我们最终用来多长时间复制一个硬盘。
也就是说分号的作用无非就是连接多个命令来顺序执行而已。用途就是上面的dd命令会用到一些。
2、多命令执行符号’&&’
格式:命令1&&命令2
作用:逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
这个执行符号我没在讲安装源码包编译的时候学习过。
比如:
[root@localhost ~]# ./configure && make && make install
这样就可以直接进行配置安装,编译,和安装编译同时进行,而不必要一个一个的来进行执行了,执行过程中只要前面有报错的就直接会停止。
我们举个简单的例子:
[root@localhost ~]# ls && echo yes
也就是是ls命令正常,然后就输出yes。而
[root@localhost ~]# ls sass && echo yes
就不会输出yes,因为前面的命令已经错了,如图:

这就是逻辑与的作用。
常用于具有逻辑与关系的命令,就比如用源码包的方式安装程序就如此。
3、多命令执行符号’||’
格式:命令1||命令2
作用:逻辑或
当命令1执行不正确,则命令2才会执行
当命令1正确执行了,命令2就不会再执行。
直接举例说明:
[root@localhost ~]# lst || echo no
这样第一个命令错了,但是第二个命令还是会输出。
[root@localhost ~]# ls || echo no
而这样第一命令正确,第二个命令反而不会输出了,因为是或关系,只要有一个正确执行就不会再输出其他的命令。
如图:

4、我们可以利用逻辑与和逻辑或的特性来检测一个命令是否正确。
[root@localhost ~]# 命令 && echo yes || echo no
这样这条命令如果正确就会继续执行echo yes输出yes,而因为和echo no是或逻辑,既然前面正确输出了,后面就不会执行输出no了。
而如果这个命令是错误的,那么就不会继续执行echo yes,但是与后面的echo no是或逻辑,所以就会输出no来进行报错。
比如:
[root@localhost ~]# ls -l && echo yes || echo no
[root@localhost ~]# ls l && echo yes || echo no
这样第一条命令输出yes,第二条就输出no,如图:

二、管道符
1、命令格式
[root@localhost ~]# 命令1 | 命令2
命令1的正确输出作为命令2的操作对象。也就是命令2会执行命令1输出的结果。
举个例子,比如:
[root@localhost ~]# ll -a /etc
ll=ls-l,-a显示所有
也就是显示etc目录下的所有文件,大家自己试试看,这个目录下的文件可是太多了,一页都显示不完,想找我们想要的文件很费劲,可能我们只想查看某一个文件,但是他给显示出一大堆来,最主要的我们只看到最后一页,前面的内容都无法看到。
大家可能会想到这么写:
[root@localhost ~]# more /etc/ | more
用分页命令more,但是不要搞错,more只能给文件的内容进行分页显示,是不能直接分屏显示命令的结果的。
那么这里就用到管道符了,他就可以解决这个问题,如下:
[root@localhost ~]# ll -a /etc/ | more
也就是说用more命令执行ll的执行结果,那自然是把ll -a的结果进行分页显示了。就这么简单。
但是管道符有一个强制的要求,也就是命令1必须是正确的输出,命令2才会执行。
好的,我们再举一个例子:
[root@localhost ~]# netstat -an
netstat -an 我们学过,是查询所有的网络连接。
如图:

命令执行完出现了这么多信息,而我们其实只需要查看正在连接着的终端或设备,剩下的好多信息我们不想看,那么我们就可以用管道符来实现了。
[root@localhost ~]# netstat -an | grep “ESTABLISHED”
也就是用grep命令来找出只有ESTABLISHED字符串的字段。
grep命令我们前面学习过,是个内容匹配搜素命令,也就是在文件里搜索具有某个字符串关联的行,这里再介绍一下:
[root@localhost ~]# grep [选项] "搜索内容" 文件名 选项: -i 忽略大小写 -n 输出行号 -v 反向查找,比如只要是有注释符'#'号的行都不显示。 --color=auto 搜索出的关键字高亮显示
123456 [root@localhost ~]# grep [选项] "搜索内容" 文件名 选项: -i 忽略大小写 -n 输出行号 -v 反向查找,比如只要是有注释符'#'号的行都不显示。 --color=auto 搜索出的关键字高亮显示
。
比如我们查看/etc/passwd文件里面的内容,但是里面内容太多,我们只想查看和root有关的内容,我们就可以这么写:
[root@localhost ~]# grep “root” /etc/passwd
如图:

这样就只输出了含有root字符串的行,而不用我们到文件里一行一行的去找了。
详细内容查看这篇教程:http://www.ql2015.cn/lamp/linux/534.html
那么说回来了,grep只能查看某个文件里相关字符的内容,而上面说的netstat -an是命令执行的结果,是不能直接用grep查看的,就相当于不能直接用more分页显示某个命令的执行结果一样,那么既然可以用管道符+more来实现分页显示命令的结果,自然也可以用管道符来查看netstat -an的执行结果,如下:
[root@localhost ~]# netstat -an | grep “ESTABLISHED”
这样一来就把和ESTABLISHED字符串有关的给显示出来了,而其他的就不会显示。
ESTABLISHED代表连接标识。
如图:

这就是管道符的作用,用起来非常有意思,非常灵活,以后也会经常用到,所以建议大家一定要熟练理解操作。
本节主要讲到命令顺序连接符’;’,逻辑与命令连接符’&&’,逻辑或命令连接符’||’,管道符’|’,都是经常要用到的,大家一定要熟练掌握。
本教程原创作者:mageo,出自每集博客,尊重作者劳动,转载请注明出处:ql2015.cn,谢谢!