HERE Documentbash里面定义块变量的途径之一

定义的形式为: 

命令<<HERE 

...

...

...

HERE




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

使用HERE Document用在变量设定:
[root@localhost ~]# WOW='Wow,great!'
[root@localhost ~]# m1=$(cat <<HERE
> 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 
这是第一行批注
这是第二行批注
这是第三行批注
其它行,类推
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 <stdio.h>
  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!





GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐