管道符、重定向与环境变量

输入、输出重定向

  1. 输入重定向是文件导入命令
  2. 输出重定向是原本输出到屏幕的命令结果写入到指定文件中
    • 种类
      1. 标准输出重定向
      2. 错误输出重定向
    • 行为
      1. 清空:清空原有内容
      2. 追加:在原有内容尾部追加
    • 具体
      1. 标准输入重定向(STDIN,文件描述符 0):默认从键盘输入,也可从其他文件或命令输入
      2. 标准输出重定向(STDOUT,文件描述符 1):默认输出到屏幕
      3. 错误输出重定向(STDERR,文件描述符 2):默认输出到屏幕
  3. 重定向符号><

    • 输入重定向用到的符号和作用

      序号符号作用
      1命令 < 文件将文件作为命令的标准输出
      2命令 << 分界符从标准输入中读入,直到遇见分界符停止
      3命令 < 文件1 > 文件2文件1作为命令的标准输入并标准输出到文件2
    • 输出重定向用到的符号和作用

      符号作用模式
      1命令 > 文件将标准输出重定向到一个文件中清空
      2命令 2> 文件将错误输出重定向到一个文件中清空
      3命令 >> 文件将标准输出重定向到一个文件中追加
      4命令 2>> 文件将错误输出重定向到一个文件中追加
      5命令 >> 文件 2>&1
      将标准、错误输出共同重定向到一个文件中追加
      6命令 &>> 文件将标准、错误输出共同重定向到一个文件中追加
  4. 案例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #----------------------------------------------------
    #----------- CASE#1 命令 > 文件
    # 将 clear 的帮助文档输出到 a.txt
    man clear > a.txt

    # 打印 a.txt 的内容
    # clear(1) clear(1)
    # NAME
    # clear - clear the terminal screen
    #
    # SYNOPSIS
    # clear
    #
    # DESCRIPTION
    # clear clears your screen if this is possible. It looks in the environ-
    # ment for the terminal type and then in the terminfo database to figure
    # out how to clear the screen.
    cat a.txt

    #----------------------------------------------------
    #----------- CASE#2 > 和 >>
    echo "Test Redirection Symbol >" > a.txt
    # Test Redirection Symbol >
    cat a.txt
    echo "Test Redirection Symbol >" > a.txt
    # Test Redirection Symbol >
    cat a.txt

    echo "Test Redirection Symbol >>" >> a.txt
    # Test Redirection Symbol >>
    cat a.txt
    echo "Test Redirection Symbol >>" >> a.txt
    # Test Redirection Symbol >>
    # Test Redirection Symbol >>
    cat a.txt

    #----------------------------------------------------
    #----------- CASE#3 > 和 2>
    # 设定:目录 a 存在,目录 b 不存在
    ls -l a > res.txt
    ls -l b > res.txt
    # total 22104
    # -rw-r--r--@ 1 root * 5310310 6 6 16:30 a.png
    # -rw-r--r--@ 1 root * 58375 11 10 2017 b.jpg
    cat res.txt

    #----------------------------------------------------
    #----------- CASE#4 输入重定向 <
    # a
    cat a.txt
    # 1
    wc -c < a.txt

管道命令符

  • 格式:命令 A | 命令 B | …… | 命令 N
  • 作用:把前一个命令原本要输出到屏幕的标准正常数据当做是下一个命令的标准输入

命令行的通配符(略)

1
2
3
4
5
6
7
8
9
10
#-r-sr-xr-x  1 root  wheel  83664  7  4 19:02 /usr/bin/at
#-rwxr-xr-x 1 root wheel 70960 7 4 19:03 /usr/bin/atos
#-r-sr-xr-x 1 root wheel 83664 7 4 19:01 /usr/bin/atq
#-r-sr-xr-x 1 root wheel 83664 7 4 19:03 /usr/bin/atrm
#-rwxr-xr-x 1 root wheel 28912 7 4 19:02 /usr/bin/atsutil
ls -l /usr/bin/at*

#-rwxr-xr-x 1 root wheel 18288 7 4 19:01 /usr/bin/c89
#-rwxr-xr-x 1 root wheel 18288 7 4 19:03 /usr/bin/c99
ls -l /usr/bin/c?9

常用的转义字符

  • 最常用的四个转义字符

    • \:反斜杠,转义特殊变量为普通字符串
    • ':单引号,转义其中所有变量为普通字符串
    • ":保留其中变量属性,不做转义处理
    • `:把其中的命令执行后返回结果
  • 案例

    1
    2
    3
    4
    5
    6
    7
    PRICE=5
    echo "$PRICE"
    echo "$$PRICE"
    echo "\$$PRICE"
    echo \$$PRICE'

    echo `uname -a`

重要的环境变量

  • 命令在 Linux 中的执行步骤:

    1. 判断输入的命令是绝对路径还是相对路径,若是,则直接执行
    2. 判断输入的命令是否为“别名命令”
    3. Bash 解释器判断用户输入的是内部命令还是外部命令
      • 内部命令,解释器内部的命令,输入后直接执行
      • 外部命令,参照步骤 4
    4. 系统将在多个路径中查找用户输入的命令文件

      • 定义这些路径的变量名为 PATH
      • 作用是告诉 Bash 解释器哪些地方可能存放命令文件

        1
        2
        # /usr/bin:/bin:/usr/sbin:/sbin
        echo $PATH
  • 常用的系统变量

    序号变量名称
    1HOME用户的主目录(home 路径)
    2SHELL用户使用的 shell 解释器名称
    3HISTSIZE输出的历史命令记录数
    4HISTFILESIZE保存的历史命令记录数
    5MAIL邮件保存路劲
    6LANG系统语言、语系名称
    7RANDOM生成一个随机数
    8PS1Bash 解释器的提示符
    9PATH定义解释器搜索用户执行命令的路径
    10EDITOR用户默认的文本编辑器

写在最后

版本内容时间
v1.0.01. 创建文档
2. 第三章阅读笔记草稿
2018-09-09 19:18:53
v1.0.11. 结束 3.1 章节
2. 增加 3.2 管道命令符
3. 增加 3.4 常用的转义字符
2018-09-10 22:59:35
v1.0.21. 结束 3.5 章节2018-09-18 21:54:44