Linux基础(9)/流程控制与管道

来源:互联网 发布:sql union 去重 编辑:程序博客网 时间:2024/05/17 23:29

flowcontrol_pipe

  1. 流程控制

    1. 顺序执行

      • 如何顺序执行多条命令?
        使用分号;
        例:
        sequence

      • 顺序执行命令的缺点
        顺序执行命令时,前面的命令执行不成功,而后面的命令又依赖上一条命令的结果,最后会出现错误。而且有时候直观的看你还无法判断结果是否正确。

    2. 选择执行

      • 为什么需要选择执行?
        上一条命令执行成功与否都做出相对应的处理。例:我们使用which来查找是否安装某个命令,如果找到就执行该命令,否则什么也不做。如果没有选择执行,则会报错。
      • 选择执行的两个命令 && 和 ||
        &&:如果前面的命令执行成功,则执行&&后面的命令,否则不执行。
        ||:如果前面的命令执行不成功,则执行||后面的命令,否则不执行。
        命令执行成功则返回值0
        flow_control_branch
  2. 管道

    • 什么是管道?
      管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。

    • 管道又分为匿名管道和具名管道

      • 使用一些过滤程序时经常会用到的就是匿名管道,在命令行中由|分隔符表示
      • 具名管道简单的说就是有名字的管道,通常只会在源程序中用到具名管道

      • 管道的使用

        1. 初体验

          ls -al /etc | less #通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入
        2. cut 命令,打印每一行的某一字段

          • 打印/etc/passwd文件中以:为分隔符的第1个字段和第6个字段分别表示用户名和其家目录

            cut /etc/passwd -d ':' -f 1,6
          • 打印/etc/passwd文件中每一行的前\后N个字符

             cut /etc/passwd -c -5 # 前五个(包含第五个)  cut /etc/passwd -c 5- # 前五个之后的(包含第五个) cut /etc/passwd -c 5 # 第五个 cut /etc/passwd -c 2-5 # 2到5之间的(包含第五个)
        3. grep 命令,在文本中或 stdin 中查找匹配字符串
          grep结合正则表达式能够实现功能复杂高效的查找。这里简单的介绍一下使用,在正则表达式一节我会详细介绍。
          • 初体验/使用grep查找文件中符合匹配字符串的内容
            grep -rnI "anranzhou" ~
            其中参数r表示递归搜索子目录的文件;参数n表示打印行号;参数I表示忽略大小写
          • 匹配字段中使用正则表达式
            export | grep ".*"
        4. wc 命令,简单小巧的计数工具
          • wc 命令用于统计并输出一个文件中行、单词和字节的数目
            wc
          • 通过管道使用wc
            ls -dl /etc/*/ | wc -l
        5. sort 排序命令
          • 字典排序/sort
          • 反转排序/sort -r
          • 按特定字段排序
            用参数t分割;用参数k指定第几字段
            sort_t_k
        6. uniq 去重命令(以history命令为例)

          • 输出重复行
            history| cut -c 8- | cut -d ' ' -f 1 | sort|uniq
          • 过滤重复行

            history| cut -c 8- | cut -d ' ' -f 1 | sort|uniq -dc #输出重复过的行(重复的只输出一个)及重复次数history| cut -c 8- | cut -d ' ' -f 1 | sort|uniq -D # 输出所有重复的行

            history命令用来查看命令行输入历史。第8行开始是命令信息。所以使用cut命令从第8行截取,并且取出第一个元素。然后排序和去重。
            uniq
            uniq_dc
            uniq_D


题外话:

  1. 一个有趣的图片查看方法
    安装aview和imagemagick,然后用asciiview命令显示图片。

    sudo apt-get install aview imagemagick;asciiview lena.jpg   #先cd 到含有图片lena.jpg的目录下,再执行该命令

    lena
    ↑原图片 ↓asciiview打开的图片
    lena_asciiview
    当然asciiview还有其他参数,可以调节输出的图像。

  2. cowsay和fortune
    先安装install cowsay和fortune;cowsay是用卡通形象来输出用户输入的文本;fortune的功能是随机生成一句话。
    cowsay_fortune
    cowsay可不只奶牛一个角色,你可以尝试其他的角色。比如下面这个:
    cowsay -f daemon
    是不是觉得很有意思呢?

0 0