美文网首页
关于shell的EOF

关于shell的EOF

作者: 水平号 | 来源:发表于2020-03-03 20:30 被阅读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的结束。而<< 则不会被当做结束分界符(只有置顶才会被认为是结束分界符)

    相关文章

      网友评论

          本文标题:关于shell的EOF

          本文链接:https://www.haomeiwen.com/subject/ykyikhtx.html