linux多命令顺序执行与管道符-54

多命令顺序执行与管道符

        一、多命令顺序执行
            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
            而这样第一命令正确,第二个命令反而不会输出了,因为是或关系,只要有一个正确执行就不会再输出其他的命令。
            如图:
            linux逻辑或命令连接符

            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 我们学过,是查询所有的网络连接。
            如图:
            网络连接查看命令netstat
            命令执行完出现了这么多信息,而我们其实只需要查看正在连接着的终端或设备,剩下的好多信息我们不想看,那么我们就可以用管道符来实现了。
            [root@localhost ~]# netstat -an | grep “ESTABLISHED”
            也就是用grep命令来找出只有ESTABLISHED字符串的字段。

            grep命令我们前面学习过,是个内容匹配搜素命令,也就是在文件里搜索具有某个字符串关联的行,这里再介绍一下:
         


            比如我们查看/etc/passwd文件里面的内容,但是里面内容太多,我们只想查看和root有关的内容,我们就可以这么写:
            [root@localhost ~]# grep “root” /etc/passwd
            如图:
            内容匹配搜索命令grep
            这样就只输出了含有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,出自每集博客,尊重作者劳动,转载请注明出处:http://www.ql2015.cn,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值