HERE Document

HERE Document是bash里面定义块变量的途径之一

定义的形式为:

命令<

...

...

...

HERE

它的作用即可以用来定义一段变量,会把命令和HERE之间的内容利用转向输入的方式交给该命令去处理。其中HERE相当于标记,可以是任何的字符串

使用HERE Document用在变量设定:

[root@localhost ~]# WOW='Wow,great!'

[root@localhost ~]# m1=$(cat <

> Line 1 is good.

> They are jack,marry and john.

> $WOW

> HERE)

echo $m1

Line 1 is good. They are jack,marry and john. Wow,great!

如上例写成

$(cat <<"HERE",表示这个Here Document拥有和双引号一样的特性,即支持变量替换的功能

也可以用来定义一段注释 ,利用HERE Document做多行批注,方法是:

:<

这是第一行批注

这是第二行批注

这是第三行批注

其它行,类推

HERE

:代表什么都不做

原本bash只支持单行批注(用#表示),现就可用于多行注释了。

注意这里HERE还有一个特殊的用法 :

就是在HERE前面加上 - 或者给HERE加上' '加上- 表明下述文字段所有TAB键将全部忽略加上' '表明以下凡是变量定义用到了' ',将会使变量呈现所见即所得的形式,也即关闭变量替换;如果加上的是" "双引号,则会进行变量替换

[root@localhost ~]# cat<<-'HERE'

>    Line 1 is good.

>    They are jack,marry and john.

>    $WOW

> HERE

Line 1 is good.

They are jack,marry and john.

$WOW

利用HERE Document,打包C(或其它程序语言)的原始码。这是Cracker散布安全漏洞程序,最喜欢的方法

1 #!/bin/bash

2 # Filename:create_prg.sh

3 echo "creating hello.c..."

4 echo

5 cat <<'EOF' > hello.c

6 #include

7

8 int main()

9 {

10    printf("Hello world!\n");

11    return 0;

12 }

13 EOF

14

15 echo "compiling hello.c..."

16 echo

17 #compile hello.c,create the excutable file

18 gcc -o hello hello.c

19

20 #if compile successfully,then excute it

21 if [ $? -eq 0 ];then

22    echo "excute hello..."

23    echo

24    chmod u+x hello

25    ./hello

26 else

27    echo 'Compile Error:hello.c'

28 fi

5到13行利用HERE Document夹带了一个hello.c程序的原始码,执行脚本时会产生hello.c,接着调用gcc 编译hello.c,若编译无误,就“执行”(开始攻击)程序文件hello.

这是shell script携带攻击程序的原型

执行结果:

[root@localhost sh]# ./create_prg.sh

creating hello.c...

compiling hello.c...

excute hello...

Hello world!

你可能感兴趣的:(HERE Document)