shell脚本【符号3】“ | ” :管道 / case结构中的“或”

标签: 管道 case 标准输入 参数 标准输出
14人阅读 评论(0) 收藏 举报
分类:

本篇博客将会介绍符号 | 的两种作用:

    一、是作为管道

    二、是case语句块中的或操作

使用1:管道

       管道是一种先进先出的单向数据通路。  

       作用:利用管道符号“|”,把一个命令的标准输出连接到另一个命令的标准输入。简单点说,就是把前一个命令的标准输出,作为下一个命令的标准输入传入。不过,管道只能处理标准输出,而不能处理标准错误输出。

       重点:标准输出和标准输入。什么是标准输出,什么是标准输入,别和其它的弄混了:点击打开链接


    比如这个例子:

      sum101脚本代码: echo $1      执行命令:./sum100  |  bash sum101

    分析:这一个命令没有输出,sum100脚本的标准输出5050无法作为sum101脚本的输入参数。

    我需要知道的是,管道传递的是什么数据;还有sum101接入参数为什么不能正常接入?

       答:管道传递的是前一个命令的标准输出,用于后一个命令的标准输入。而这个前提是后一个命令需要接收标准输入。而sum101脚本中,并没有接收标准输入的命令语句。

    问1:为什么有的命令可以接收管道传过来的数据,比如wc命令,有的命令接收不了,比如echo命令。

      答:管道会将前面命令的标准输出当做后面的标准输入,也就说,前一个命令需要有标准输出,而后一个命令需要能够接受标准输入。而命令认STDIN的,或者认-参数的,才能使用管道;不认的,只能使用xargs,把前面的输出补到后面命令的尾巴上,当做参数。

      问2:用管道传输数据时,两边的命令有什么限制,管道传输的是什么数据?

      答:前一个命令需要有标准输出,后一个命令需要能够接受标准输入。

    问3:如果前一个命令没有标准输出,后一个命令会怎样?

    答:这个不同的shell处理会有不同。在bash中,即便没有标准输入,后面程序仍然会继续执行,但不会获得任何输入。所以,后一个程序会执行。另外,一般整个管道的返回状态是最后一个命令的退出状态。

      问4:管道符中加xargs和不加xargs的区别,以及xargs与exec的区别

    管道符后不加xargs,相当于先把“|”前的命令输出内容作为后一个命令的标准输入。

    管道符后加上xargs,相当于直接从键盘输入管道符前面命令执行的结果,加到管道符后面命令,作为其参数。

       xargs与管道|的区别:

        | 用来将前一个命令的标准输出传递到下一个命令的标准输入,xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。

        xargs与exec的区别:

    (1)exec参数是一个一个传递的,传递一个参数执行一次命令;xargs一次将参数传给命令,可以使用-n控制参数个数

    (2)exec文件名有空格等特殊字符也能处理;xargs不能处理特殊文件名,如果想处理特殊文件名需要特殊处理

      问5:常用命令可以直接用于管道命令(接收标准输入),主要有:

       cat、cut、cpio、grep、gawk、sort、uniq、wc、tee、tr、col、join、paste、expand、xargs   在脚本中还有read命令可以接收标准输入(read命令不接收参数的传入)。

                比如,脚本test代码:read a b c  ;  echo $b    执行命令:bash test 4 5 6   这个“4 5 6”参数是不会被read接收的。

        问6:Shell函数、shell脚本可不可以用管道命令?

        答案是:当然可以!!

        问7:shell函数和shell脚本执行的最后是不是只有return数据和exit数据,还是说Shell函数和shell脚本中命令语句的输出也是shell函数和shell脚本输出的一部分?

       答:return和exit是程序成功与否的出口状态信息,而不是标准输出信息,所以不会显示,也不可能通过管道传递。

              shell函数和shell脚本中的任何标准输出都是其标准输出的一部分。

 

使用2:作为case参数选择的‘或’操作 P219

        Shell函数中case分支语句的结构:

        case “$variable” in

                partern1)

                        command-list ;;

                partern2)

                        command-list ;;

                partern3)

                        command-list ;;

                ……

                esac

    分析:parternN中可以使用单个元素,也可以使用运算符“|”,表示多个模式的逻辑或关系。

      举例:

      功能:实现case语句块中“|”的检测

    脚本文件:sum101

      代码:

            case "$1" in

                   a)echo a          ;;

                   2|1)   echo right   ;;

                   1 | 2) echo error    ;;

                   *) echo what ;;

           esac

      执行命令:bash sum101 1        (“1”是传入参数)

    输出结果:right

查看评论

shell脚本精简教程

详细的介绍shell脚本的使用。
  • 2016年12月19日 14:54

shell中| ; &的优先级

| 的优先级要高于 ;date; who |wc 2016年 11月 14日 星期一 22:18:38 CST 1 5 45你会发现只有who的结果送到了wc命令....
  • lujun9972
  • lujun9972
  • 2016-11-14 22:21:30
  • 536

Linux管道的作用--管道命令在脚本中的使用

 在UNIX下的管理性文件,大部分是不需要特殊的文件专用工具即可编辑,打印和阅读的简易文本文件。 这些文件大部分放在标准目录:/etc下。如: 常见的密码文件和组文件:(passwd,g...
  • Field_Yang
  • Field_Yang
  • 2016-03-20 07:22:49
  • 1794

shell脚本中的一些符号

在shell中常用的特殊符号罗列如下:  # ;   ;; . , / \\ 'string'| !   $   ${}   $? $$   $*  \"string\"* **   ? ...
  • qq_31550425
  • qq_31550425
  • 2016-12-12 14:55:58
  • 752

shell脚本使用case

[root@localhost shell_project]# vim info-case.sh !/bin/bash #case使用 read -p "请输入你的性别:" ...
  • echo_Ae
  • echo_Ae
  • 2017-08-16 11:03:15
  • 159

shell脚本关于case的用法

#!/bin/bash addr=undef; while [ $# -gt 0 ]; do case "$1" in -d | --start) shift ...
  • yohoph
  • yohoph
  • 2015-03-04 18:03:14
  • 619

(2)再说管道与shell脚本执行关系

实验1:变量$path的输出是空值。root@37C:~# pwd | read path root@37C:~# echo $pathroot@37C:~# 实验2:#代码: $ ls -l1 | ...
  • beautysleeper
  • beautysleeper
  • 2016-09-19 17:31:16
  • 603

shell 脚本-符号-基础语法

为了便于识别  建议 以.sh 结尾shell脚本 可以放上所有的命令行的指令(源于bash)shell脚本 是 解释型语言      c/c++ 是编译型语言下面用到的 shell代码sh_1.sh...
  • alick97
  • alick97
  • 2016-10-25 14:02:45
  • 1069

shell 脚本和case例子

转自:http://hlee.iteye.com/blog/577628   case和select结构在技术上说并不是循环, 因为它们并不对可执行代码块进行迭代. 但是和循环相似的是, 它们也依靠...
  • fuli1215
  • fuli1215
  • 2011-05-01 17:09:00
  • 20831

shell脚本学习--符号

一、shell简单介绍      shell的作用是解释执行用户的命令,用户输入一条命令,shell就解释一行【交互式】。另一种执行命令的方式是【批处理】,用户事先写一个shell脚本,其中有很多条...
  • Sekai_Z
  • Sekai_Z
  • 2016-08-14 21:10:19
  • 787
    个人资料
    持之以恒
    等级:
    访问量: 2035
    积分: 318
    排名: 23万+
    文章存档