shell中EOF的相关用法

本文详细介绍了Shell脚本中EOF的用法,包括如何与`<<`结合使用提供命令输入,以及如何用其他字符替换EOF。还提到了`<<-`的使用,它允许在EOF前有制表符或空格。此外,通过示例展示了如何在脚本中使用`cat`和EOF进行多行输入。文章还讨论了在脚本中如何利用EOF创建HTML报告,包括报告系统信息、磁盘使用情况和家庭目录空间利用情况。
摘要由CSDN通过智能技术生成

1、EOF 

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

        当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作stdin,直到shell又看到该分界符(位于单独的一行)。这个分界符所包含的区域内可以定义的任何命令。

Example:自动登录mysql(root:root,passwd:123456),查询test库,test表里的user=aa的记录。

复制代码代码如下:

#! /bin/bash
mysql -uroot -p123456 <<EOF
use test;
select * from test  while id = 1001; 
exit
EOF

特殊用法:

字符并不是只能用EOF也可以其它的:
: << COMMENTBLOCK
   shell脚本代码段
COMMENTBLOCK


echo start
:<<COMMENTBLOCK
echo
echo "this is a test"
echo
COMMENTBLOCK
echo end
cat和eof结合使用具有追加功能

使用Cat和EOF多行输入

cat >> ./test.txt <<EOF 

Hello Word! 

good good study,day day up! 

EOF

以上的脚本命令是,在tets.txt文件后面加上2行代码。

2、shell 中 << 和 <<-的区别:

        在我们使用cat <<EOF时,我们输入完成后,需要在一个新的一行输入EOF结束stdin的输入。EOF必须顶行写,前面不能用制表符或者空格。比如,下面的语句就不会出错:

<span style="font-size:18px;">cat <<EOF  
Hello,world!  
EOF</span>

        如果结束分解符EOF前有制表符或者空格,则EOF不会被当做结束分界符,只会继续被当做stdin来输入。而<<-就是为了解决这一问题:

cat <<-EOF  
Hello,world!  
      EOF 

上面的写法,虽然最后的EOF前面有多个制表符和空格,但仍然会被当做结束分界符,表示stdin的结束。

这就是<<和<<-的区别。

3、在shell script中使用cat <<_EOF_ 和 cat <<-_EOF_ ,其区别和上述解释一样。

<span style="font-size:18px;">#!/bin/bash
# Program to output a system information page
TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME=$(date +"%x %r %Z")
TIME_STAMP="Generated $CURRENT_TIME, by $USER"
report_uptime () {
    cat <<-_HHH_
    <H2>System Uptime</H2>
    <PRE>$(uptime)</PRE> 
    _HHH_
    return
}
report_disk_space () {
    cat <<-_EDD_
    <H2>Disk Space Utilization</H2>
    <PRE>$(df -h)</PRE>
    _EDD_
    return
}
#函数中的每行必须对齐,要空只能使用TAB键,否者脚本不能正确运行
report_home_space () {
    cat <<- _EOF_
    <H2>Home Space Utilization</H2>
    <PRE>$(du -sh /home/*)</PRE>
    _EOF_
    return
}
cat <<_EOF_
<HTML>
    <HEAD>
        <TITLE>$TITLE</TITLE>
    </HEAD>
    <BODY>
        <H1>$TITLE</H1>
        <P>$TIME_STAMP</P>
        $(report_uptime)
        $(report_disk_space)
        $(report_home_space)
    </BODY>
</HTML>
_EOF_
</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值