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

原文地址:https://www.cnblogs.com/mianbaoshu/p/12069763.html

时间: 2025-01-18 04:44:35

21 shell Here Document/String的相关文章

【Shell脚本学习24】Shell输入输出重定向:Shell Here Document,/dev/null文件

Unix 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器. 输出重定向 命令的输出不仅可以是显示器,还可以很容易的转移向到文件,这被称为输出重定向. 命令输出重定向的语法为: $ command > file 这样,输出到显示器的内容就可以被重定向到文件. 例如,下面的命令在显示器上不会看到任何输出: $ who > users 打开 users 文件,可以看到下面的内容: $ cat

Shell 学习21 - Shell 函数

函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () { list of commands [ return value ] } 如果你愿意,也可以在函数名前加上关键字 function: function function_name () { list of commands [ return value ] } 函数

[Bash Shell] Shell学习笔记

1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序.建立文件并以并行的方式协调各个程序的运行.因此,对于用户来说,s

linux shell基础语法

1.第一个Shell脚本 打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码: #!/bin/bash echo "Hello World !" "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell.echo命令用于向窗口输出文本. 运行Shell脚本有两种方法. 1.1作为可执行程序 将上面的代码保存为t

shell编程(二)

Shell echo命令 echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串.可以使用echo实现更复杂的输出格式控制. 显示转义字符 echo "\"It is a test\"" 结果是:"It is a test" 显示变量 name="OK" echo "$name It is a test" 结果是:OK It is a test 如果变量与其它字符相连的话,需要使用大括号({ }

shell 总结

Reference: http://saiyaren.iteye.com/blog/1943207 1.     Shell  读取文件和写文件 for line in $(<top30000.url.utf-8.http_server_front_hphp.txt); do tmp_port=8080; for((i=0;i<=7;i++));do echo ${line/192\.168\.12\.63/192\.168\.12\.63:$tmp_port} >>top3000

Linux Shell脚本教程:30分钟玩转Shell脚本编程(笔记)

资料链接 Shell有两种执行命令的方式: 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条. 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令. shell脚本有循环和控制语句,为解释执行,不需要编译. 常见的Shell脚本解释器: 有bash.sh.csh.ksh等.我们说的Shell其实是指Shell脚本解释器. bash:Linux默认的shell

程序内执行shell命令自动获取局域网内所有在线IP和开放端口(Linux)

前言 题目说的有点长,其实就是以下几件事,第一是让Shell命令可以在程序内执行,然后将执行结果传递给变量,从而可以进行后续的事务处理,第二是使用nmap命令获取当前局域网内所有在线IP和开放的端口,最后就是对nmap获得的结果进行处理,得到只有IP和端口的结果. Linux命令行的强大功能相信使用Linux的人都知道,一个命令等于你在windows用几百行甚至上千行的代码量才能实现,所以,如果很好的利用shell命令,可以说是事半功倍. 而要充分利用shell的结果,必然是需要获得可以处理的命

Document类

一.类结构 org.jsoup.nodes Class Document java.lang.Object org.jsoup.nodes.Node org.jsoup.nodes.Element org.jsoup.nodes.Document All Implemented Interfaces: Cloneable -------------------------------------------------------------------------------- public