zoukankan      html  css  js  c++  java
  • 21 shell Here Document/String

    Here Document 的用法

    Here Document可以将它理解为“嵌入文档”“内嵌文档”“立即文档”,它将命令需要处理的数据或者字符串与代码放在一起,适用于命令需要处理的数据量很小,不必要将其单独放在一个文件中的情况。

    总的来说,在脚本中嵌入一小段多行数据时,使用Here Document是很有用的,但是嵌入很大数据时,还是应该保持你的逻辑(你的代码)和你的输入(你的数据)分离,最好是在不同的文件中。

    用法说明
    command <<END
        document
    END
    1. command是 Shell 命令,<<END是开始标志,END是结束标志,document是输入的文档(也就是一行一行的字符串)。
    2. 使用command明林处理document部分的数据,直到遇到终止符END为止(终止符END不会被读取)
    3. 终止符END必须独占一行,并且必须要顶格写。终止符可以出现在正常的数据流中,只要它不是顶格写的独立的一行,就不会被作为结束标志。
    4. 终止符可以由用户自定义
    5. 使用单引号或者双引号将分界符包围起来可以使 document中的命令替换失效
    6. <<END之间增加-来消除制表符的影响
    7. Here Document 常用于向用户显示命令或者脚本的用法信息
    需求脚本结果

    cat 命令一般是从文件中读取内容,并将内容输出到显示器上,

    借助 Here Document,cat 命令可以从键盘上读取内容

     cat <<TEST

    > test1

    >  Test

    >  TEST #终止符前有空格,不生效

    > TEST #顶格写的终止符,不会输出

    test1

     Test

     TEST

    <是第二层命令提示符

    正文中也可以出现结束标志TEST,但只要它不是独立的一行,

    并且不顶格写,就不会生效。

    在脚本文件中使用 Here Document,并将 document 中的内容转换为大写。
    1. #!/bin/bash
    2. #在脚本文件中使用立即文档
    3. tr a-z A-Z<<END 
    4. one two three
    5. AbCdefGH
    6. END

    ONE TWO THREE

    ABCDEFGH

    tr命令 将小写字母转换称大写字母

    命令替换

    默认情况下,document中出现的变量或命令会被求值或运行,Shell 会先将它们替换以后再交给 command

    但也可以将分界符用单引号或者双引号包围起来使 Shell 替换失效

    1.默认情况

    1. name=qpy
    2. cat <<END
    3. > ${name} is a girl
    4. > END

    2.使用单/双引号包围END使命令替换失效

    1)单引号

    1. cat <<'END'
    2. > ${name} is a girl
    3. > END

    2)双引号

    1. cat <<"END"
    2. > ${name} is a girl
    3. > END

    输出:qpy is a girl

    输出:${name} is a girl

    输出:${name} is a girl

    在脚本文件中使用 Here Document时,如果在document的行首使用制表符时,

    默认情况下,行首的制表符也被当做正文的一部分,但也可以通过<<END之间增加-来消除制表符的影响

    制表符主要是用于代码对齐

    1.默认情况

    #!/bin/bash

    cat <<END

            aaa

            bbb

    ccc

    END

    2.在<<END之间增加-来消除制表符的影响

    #!/bin/bash

    cat <<-END

            aaa

            bbb

    ccc

    END

    输出

    1. aaa
    2. bbb
    3. ccc

    输出

    1. aaa
    2. bbb
    3. ccc
    Here Document 最常用的功能还是向用户显示命令或者脚本的用法信息

     

    Here String的用法

    Here String 是 Here Document 的一个变种

    用法说明
    command <<< string
    1. command 是 Shell 命令,string 是一个普通字符串。
    2. Here String可用于发送较短数据到进程中
    3. 当字符串中有空格时,必须使用单引号或双引号将字符串包围起来
    4. 使用双引号或不适用引号包围字符串时会解析字符串中的变量
    5. 使用单引号包围字符串时不会解析字符串中的变量
    6. 使用引号是,Here String 还可以接收多行字符串作为命令的输入
    7. 与 Here Document 相比,Here String 在发送变量内容(而不是文件)到像 grep 或者 sed 这样的过滤程序时相当方便
    需求脚本结果
    将小写字符串转换为大写字符串

    tr a-z A-Z <<< one

    ONE
    使用双引号,会解析字符串中的变量

    tr a-z A-Z <<< "one two three"

    var=two

    tr a-z A-Z <<<"one $var there"

    ONE TWO THREE

    ONE TWO THREE

    使用单引号,不会解析变量

    var=two

    tr a-z A-Z <<<'one $var there'

    ONE $VAR THERE

    使用引号,Here String 可以接收多行字符串作为命令的输入

    tr a-z A-Z <<<"one two there > four five six > seven eight"

    ONE TWO THERE FOUR FIVE SIX SEVEN EIGHT

  • 相关阅读:
    <linux程序设计> 第四章 [ 程序参数 / 环境变量 / 日期与时间]
    阻塞分析
    架构设计分类
    软件测试
    C#中常用的加密类
    SQL2005
    用异或的性质实现简单加密解密
    在sql中取系统时间?日期?年?
    SQL Server常用到的几个设置选项
    Connection Command[ExecuteNonQuery ExecuteScalar ExecuteReader] DataReader DataAdapter DataSet
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12069763.html
Copyright © 2011-2022 走看看