shell 交互方法<<EOF

发布时间:2024年01月03日

文章目录如下

1. 什么是EOF

2. EOF的语法

3. EOF的实际应用

3.1. 定义多行注释

3.2. 清理缓存


????????

1. 什么是EOF

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

????????

2. EOF的语法

基本格式如下:

命令 <<EOF
    交互命令1
    交互命令2
EOF

在任意一个命令后方加入 <<EOF,在下一行编写需要交互的命令,最后以 EOF 结尾。

????????

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

命令 <<ABC
    交互命令1
    交互命令2
ABC

????????

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

cat <<EOF
    第1行字符串~
    第1行字符串~
 EOF  # 前面有一个空格

????????

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

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

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

????????

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

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

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

????????

3. EOF的实际应用

3.1. 定义多行注释

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

#!/bin/bash

<<COMMENT
    Author: yt
    Start time: 2024-01-01
    Version num: 1.0
    Script use: xxx
COMMENT

echo "这是一个脚本"

????????

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

????????

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

文章来源:https://blog.csdn.net/m0_61066945/article/details/135310093
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。