• shell中的cat和文件分界符(<<EOF)


     在shell中,文件分界符(通常写成EOF,你也可以写成FOE或者其他任何字符串)紧跟在<<符号后,意思是分界符后的内容将被当做标准输入传给<<前面的命令,直到再次在独立的一行遇到这个文件分界符(EOF或者其他任何字符,注意是独立一行,EOF前面不能有空格)。通常这个命令是cat,用来实现一些多行的屏幕输入或者创建一些临时文件。

    1、最简单的用法
    root@ribbonchen-laptop:~# cat<<EOF
    > ha
    > haha
    > hahaha
    > EOF
    输出:
    ha
    haha
    hahaha
    2、把输出追加到文件
    root@ribbonchen-laptop:~# cat<<EOF>out.txt
    > ha
    > haha
    > hahaha
    > EOF
    root@ribbonchen-laptop:~# cat out.txt
    ha
    haha
    hahaha
    3、换一种写法
    root@ribbonchen-laptop:~# cat>out.txt<<EOF
    > ha
    > haha
    > hahaha
    > EOF
    root@ribbonchen-laptop:~# cat out.txt
    ha
    haha
    hahaha
    4、cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束
    root@ribbonchen-laptop:~# cat>filename
    ha  
    haha 
    hahaha
    root@ribbonchen-laptop:~# cat filename
    ha
    haha
    hahaha
     
    下面的脚本实现了一个简单的菜单功能:
    #!/bin/bash
    MYDATE=`date +%d/%m/%Y`
    THIS_HOST=`hostname`
    USER=`whoami`
    while :
    do
      clear
      cat<<EOF
      _______________________________________________________________
      User:$USER        Host:$THIS_HOST          DATE:$MYDATE
      _______________________________________________________________
                     1:List files in current dir
                     2:Use the vi editor
                     3:See who is on the system
                     H:Help sreen
                     Q:Exit Menu
      _______________________________________________________________
    EOF
      echo -e -n " Your Choice [1,2,3,H,Q]>"
      read CHOICE
        case $CHOICE in
        1) ls
          ;;
        2) vi
          ;;
        3) who
          ;;
        H|h)
          cat<<EOF
          This is the help screen,nothing here yet to help you!
    EOF
          ;;
        Q|q) exit 0
          ;;
        *) echo -e " 07unknown user response"
          ;;
        esac
      echo -e -n " Hit the return key to continue"
      read DUMMY
    done
     
     
     
     
    #!/bin/bash
    TARGET_DIR=$PWD
    cd /
    list=`cat << EOF
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/examples/widgets/wiggly/wiggly
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/embedded/fluidlauncher/screenshots/raycasting.png

    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/embedded/fluidlauncher/slides/demo_6.png
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/embedded/fluidlauncher/slides/demo_3.png
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/embedded/fluidlauncher/slides/demo_5.png
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/embedded/fluidlauncher/fluidlauncher
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/embedded/fluidlauncher/config.xml
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/embedded/styledemo/styledemo
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/pathstroke/pathstroke.html
    usr/local/Trolltech/QtEmbedded-4.6.3-arm/demos/pathstroke/pathstroke
    EOF
    `
    tar cfvz $TARGET_DIR/target-qte-4.6.3.tgz $list
    EOF本意是 End Of File,表明到了文件末尾。

    使用格式基本是这样的:
    命令 << EOF
    内容段
    EOF
    将“内容段”整个作为命令的输入。
    你的代码里就是用cat命令读入整段字符串并赋值给list变量。
    其实,不一定要用EOF,只要是“内容段”中没有出现的字符串,都可以用来替代EOF,只是一个起始和结束的标志罢了。

    有个特殊用法不得不说:
    : << COMMENTBLOCK
    shell脚本代码段
    COMMENTBLOCK
    这个用来注释整段脚本代码。 : 是shell中的空语句。

    搜索一下 Here document 你会明白更多。

    如果就一行,那么直接赋值即可:
    list="usr/local/Trolltech/QtEmbedded-4.6.3-arm/examples/widgets/wiggly/wiggly"

    EOF相当于读文件的方式,适用于多行内容的操作。
  • 相关阅读:
    Bank5
    面向对象特征之多态性
    继承性与super的使用练习
    阿里云服务器被挖矿minerd入侵的解决办法
    ES Pipeline Aggregation(管道聚合)
    Elasticsearch索引自动套用模板
    docker.service启动失败:Unit not found的原因及解决办法
    Kubernetes集群资源监控
    Kunbernetes-基于NFS的存储
    Kubernetes核心技术Helm
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/3679098.html
Copyright © 2020-2023  润新知