关于shell的EOF

2020-03-03  本文已影响0人  水平号

shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。
可以把EOF替换成其他东西,只要前后字符串能对应起来就可以,意思是把内容当作标准输入传给程序。

其简单用法如下:

<<EOF        //开始
....
EOF            //结束

还可以自定义,比如自定义:

<<BBB        //开始
....
BBB              //结束
熟悉几个特殊符号:

<     输入重定向

>    输出重定向

>>  输出重定向,进行追加,不会覆盖之前内容

<<  标准输入来自命令行的一对分隔号的中间内容

cat和EOF配合使用

(1)cat和EOF简介
cat 用于显示文本文件内容,全部输出
EOF “end of file”,表示文本结束符

(2)使用
用法1.多行导入文件(新建文件或者覆盖文件内容)
在cat <<EOF >abcd.txt命令 与下一个输入的EOF行之间的所有文本行都会被当做是stdin数据。

shell> cat << EOF        #标准输入来自命令行的一对分隔号EOF的中间内容给cat,cat显示出来
> 1111
> 111
> 222
> EOF
1111
111
222

shell> cat << EOF >abcd.txt   #标准输入来自命令行的一对分隔号EOF的中间内容给cat,cat显示输出重定向给abcd.txt文件  
> uu
> hello world
> ii
> hah
> EOF
shell> cat abcd.txt
uu
hello world
ii
hah 
这就是多行导入!

用法2.文件追加

cat << EOF >> test.sh

(3)说明

>其实可以用其他字符来代替EOF,它也只是个标识符而已!
如果cat内容中带有$变量的时候会将$和变量名变成空格,想到到转义字符\添加之后可以搞定。同样cat <<EOF中含有`的时候会将“内的命令转换成结果,同样也需要添加转义字符
例如

cat <<EOF >> /home/oracle/.bash_profile  
PATH=\$PATH:\$HOME/bin  
export ORACLE_BASE=/u01/app/oracle  
export ORACLE_HOME=\$ORACLE_BASE/10.2.0/db_1  
export ORACLE_SID=yqpt 
export PATH=\$PATH:\$ORACLE_HOME/bin  
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8" 
EOF 

如果不是在脚本中,我们可以用Ctrl-D输出EOF的标识

# cat > test.txt
abcd
dcba
eftf
Ctrl-D

(4)<<-和<<的区别

shell> cat <<- EOF > test.txt
> sdfsad
> sdlfajsd
>    EOF

最后的EOF前面有多个制表符和空格,但仍然会被当做结束分界符,表示stdin的结束。而<< 则不会被当做结束分界符(只有置顶才会被认为是结束分界符)

上一篇下一篇

猜你喜欢

热点阅读