shell 交互方法<<EOF

文章目录如下

1. 什么是EOF

2. EOF的语法

3. EOF的实际应用

3.1. 定义多行注释

3.2. 清理缓存


        

1. 什么是EOF

    EOF 是一种特殊的输入重定向操作符。它的作用是在命令行中指定一个多行输入,并将其作为标准输入传递给命令。在编写 shell 脚本时,经常用来在命令行中提供多行输入,尤其常用于需要交互式输入的场景,例如交互输入 root 密码。

        

2. EOF的语法

基本格式如下:

命令 <

在任意一个命令后方加入 <

        

这个 EOF 命令不是固定的,可以是任意字符,但结尾字符必须与开始字符一致。

命令 <

        

注意:结尾字符前面不能包含空格,如果包含空格就会出现这种异常

cat <

shell 交互方法<<EOF_第1张图片

        

在大部分情况下,我们语法需要缩进时,如果还将 EOF 中的命令和结尾的 EOF 贴着左边写,那么整体代码会显得非常难看,这时候就需要在开始 EOF 前加上一个符号 -

<<-EOF
cat <<-EOF
    1行字符串~    # 使用缩进
    2行字符串~    # 使用缩进
    EOF          # 使用缩进

加上 - 符号后,不论是中间的字符串还是结尾的 EOF 都可以使用缩进(不限于1个缩进)

shell 交互方法<<EOF_第2张图片

        

【示例】封装一个函数,对某个文件追加内容

# 定义一个函数
function AdditionalInformation(){
    cat <<-EOF >>file.txt    # 将内容追加到文件
        1行字符串~
        2行字符串~
    EOF
    }
AdditionalInformation

shell 交互方法<<EOF_第3张图片

使用 -EOF 后,缩进会被忽略

        

3. EOF的实际应用

3.1. 定义多行注释

比如在编写脚本时,需要注明该脚本的作者、时间、作用等多行信息时,可以使用 EOF 实现

#!/bin/bash

<

        

3.2. 清理缓存

我们知道清理缓存需要 root 权限,普通用户想要清理缓存必须先 su root 才能实现。在 shell 中,我们也可以利用 EOF 来实现。

# root密码
root_pwd='123456'

# 定义一个清理缓存的方法
function ClearCache(){
    su root <<-EOF
        ${root_pwd}
        echo 3 > /proc/sys/vm/drop_caches
        echo "清理缓存成功!"
    EOF
    }
ClearCache

信息前面弹出了一个 "密码" 的字样,意思就是 su root 需要手动输入密码。使用 EOF 后将自动输入密码,而后再依次执行后面的命令。

        

当然了,我们还可以通过 EOF 检查密码

# root密码
root_pwd='123456'

# 定义一个检查root密码的方法
function CheckRootPassword(){
    # 输入root密码
    su root <<-EOF
        ${root_pwd}
    EOF

    # 判断是否执行成功
    if [ $? -eq 0 ];then
        echo -e "\n[INFO] 密码正确"
    else
        echo -e "\n[ERROR] 密码错误"
    fi
    }
CheckRootPassword

shell 交互方法<<EOF_第4张图片

        

EOF 可以实现本机的交互,我试了 ssh 执行命令却不行,ssh 还得免密之后才能交互命令。

你可能感兴趣的:(shell,编程,shell,自动交互命令,EOF)