首页 > 系统相关 >Linux免交互及使用 Here Document 实现免交互

Linux免交互及使用 Here Document 实现免交互

时间:2024-09-03 13:54:31浏览次数:14  
标签:Here cat 命令 Linux Document 交互 bash


文章目录


交互概念

交互指的是在程序运行过程中,用户可以通过发出指令控制程序的执行,而不是仅由程序单方面执行。例如,在多媒体播放时,用户可以暂停或调整音量。对于Linux操作系统,许多操作会涉及到交互,比如使用readftppasswdsusudofdisk等命令。

Linux中的免交互应用

为了实现自动化运维,Linux常常需要实现免交互操作,避免人工干预。例如,可以使用Here DocumentExpect等方法将命令提供给交互式程序,达到自动执行的效果。

免交互式操作(也称为非交互式操作)指在不需要用户干预的情况下,程序或脚本自动完成操作。这种方式广泛用于批量任务执行、自动化脚本和远程管理。实现免交互的常见方法有:

  1. Here Document
  2. Expect 脚本
  3. 重定向和管道
  4. 配置免密钥 SSH 登录

Here Document免交互

Here Document 是一种 I/O 重定向 技术,允许将一组命令或输入直接传递给一个程序,而无需创建临时文件。常用于向交互式命令提供输入。Here Document 使用 << 操作符。

基本语法

命令 <<标记
...
内容
...
标记

注意事项

  • 标记可以使用任意合法字符(通常为EOF);
  • 结尾的标记一定要顶格写,前面不能有任何字符;
  • 结尾的标记后面也不能有任何字符(包括空格);
  • 开头标记前后的空格会被省略掉。

示例

  1. 行数统计

    免交互方式实现对行数的统计,将要统计的内容置于标记“EOF”之间,直接将内容传给 wc -l 来统计

    wc -l <<EOF  # 以什么为标记,就以什么为结束
    Line1
    Line2
    EOF
    
  2. 读取输入

    通过 read 命令接收输入并打印,输入值是两个 EOF 标记之间的部分,作为变量 i 的值

    read i <<EOF
    Hi
    EOF
    echo $i
    
  3. 设置用户密码

    通过 passwd 给用户设置密码

    passwd lisi <<EOF
    abc1234  # 这两行是输入的密码和确认密码
    abc1234
    EOF
    
  4. 文件输出重定向

    通过cat实现查看和重定向输出到指定文件

    cat <<EOF >test.txt # 覆盖写入到文件
                       # 或cat >test.txt <<EOF
    hello world
    EOF
    #输出:
    hello world
    
  5. tee命令重定向输出加标准输出

    tee命令有标准输出的作用,可以直接重定向输入到文件中

    tee test2.txt <<EOF
    this is tee test
    EOF
    # 输出:
    this is tee test
    

功能配置示例

  1. 支持变量替换

    在写入文件时会先将变量替换成实际值,再结合 cat 命令完成写入

    #!/bin/bash
    file="test1.txt"
    i="school"
    cat > $file <<EOF
    I am going to $i
    EOF
    
  2. 整体赋值给变量再打印变量值

    整体赋值给变量,然后通过 echo 命令将变量值打印出来

    #!/bin/bash
    var="Great! I am going to school!"
    myvar=$(cat <<EOF			 
    This is Line 1.
    Today is Monday.
    $var
    EOF
    )
    
    echo "$myvar"
    # 输出:
    This is Line 1.
    Today is Monday.
    Great! I am going to school!
    
  3. 关闭变量替换,输出原字符

    关闭变量替换的功能,按照字符原本的样子输出,不做任何修改或替换

    #!/bin/bash
    var="Great! I am going to school!"
    myvar=$(cat <<'EOF'	# 对标记加单引号,即关闭变量替换
    This is Line 1.
    Today is Monday.
    $var
    EOF
    )
    
    echo $myvar       # 最后一行直接输出成$var
    # 输出:
    This is Line 1. Today is Monday. $var
    
  4. 去掉每行之前的 TAB 字符

    在标记前加“-”,即可抑制各行首TAB,用空格无效

    #!/bin/bash
    cat <<-'EOF'
                    tab27
       tab28
    EOF
    # 输出:
     tab27
     tab28
    
  5. 多行注释

    Bash 的默认注释是“#”,该注释方法只支持单行注释;

    Here Document 的引入解决了多行注释的问题。

    “:”代表什么都不做的空命令。中间标记区域的内容不会被执行,会被 bash 忽略掉,因此可达到批量注释的效果。

    #!/bin/bash
    var="Great! I am going to school!"
    : <<EOF    # 多行注释,
               # “:”开头的 Here Document 标记
               # 内容不会被执行
    This is Line 1.
    Today is Monday.
    $var
    EOF
    echo "$var" # $var为什么还能打印,已经定义了。
    # 没有了前两行正常的输出,有$var的输出,因为var已经定义了。
    # 输出:
    Great! I am going to school!
    

    简化后:

    : <<EOF
    a
    b
    c
    EOF
    # 输出没有任何结果,了解即可,还是用'#'注释直观
    

标签:Here,cat,命令,Linux,Document,交互,bash
From: https://blog.csdn.net/qq_44421043/article/details/141790791

相关文章

  • Linux 使用 expect 脚本实现自动化交互
    文章目录Expect自动化交互主要功能和语法执行方式嵌入执行模式示例Expect自动化交互expect是一种基于tcl语言的自动化工具,用于替代用户与程序之间的交互动作,实现自动化交互。它的应用场景包括SSH、SCP、FTP、RSYNC等任务中的免密交互,以及设置密码等自动化任务......
  • 专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重
    专业级语义搜索优化:利用CohereAI、BGERe-Ranker及JinaReranker实现精准结果重排1.简介1.1RAG在说重排工具之前,我们要先了解一下RAG。检索增强生成(RAG)是一种新兴的AI技术栈,通过为大型语言模型(LLM)提供额外的“最新知识”来增强其能力。基本的RAG应用包括四个关......
  • 专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重
    专业级语义搜索优化:利用CohereAI、BGERe-Ranker及JinaReranker实现精准结果重排1.简介1.1RAG在说重排工具之前,我们要先了解一下RAG。检索增强生成(RAG)是一种新兴的AI技术栈,通过为大型语言模型(LLM)提供额外的“最新知识”来增强其能力。基本的RAG应用包括四个关......
  • Go语言中的交互式CLI开发:survey库简介
    在构建命令行工具时,良好的用户交互体验至关重要。尤其是在需要与用户进行复杂输入的场景下,传统的命令行参数和标志可能显得笨拙。github.com/AlecAivazis/survey/v2是一个为Go语言设计的库,专门用于构建交互式的命令行界面。它提供了多种用户输入方式,让你的CLI工具变得更加易......
  • 25. shell当中的函数详解,管理函数,定义函数,交互式环境调用函数,查看删除函数,脚本中的函
    文章目录前言管理函数定义函数交互式环境调用函数查看函数删除函数脚本中的函数定义及使用函数使用函数文件环境函数示例总结友情链接前言函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独......
  • Linux网络抓包-tcpdump
    tcpdump-dumptrafficonanetworktcpdump是linux上一个强大的抓包工具。tcpdump常用抓包命令tcpdump-v-iany-s0-wtest.caphost192.168.0.1andport5001#-v:打印详细输出#-i:指定网卡,例如eth0,any代表所有网卡#-s:指定捕获的数据包的大小,0代表......
  • 12.Linux当中如何搜索文件,find详解,示范
    在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find,这个命令使用非常频繁,需要熟练掌握文章目录前言find使用详解1.介绍2.语法详解3.find选项示例(option)4、可选项总结友情链接前言在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find......
  • Linux配置软路由
    假设出口网口是end0,入口网口是end1:outdev=end0indev=end1#子网不要与其他interface的IP重合prefix=10.233.233配置出口网口IP#nmclidevset$indevmanagednoiplinksetupdev$indevipaddradd$prefix.1/24dev$indev配置DHCPaptinstallisc-dhcp-servercp......
  • Linux的目录结构
    1.登录虚拟机用户名:root 密码:0412327右键打开终端二.Linux的基本命令ls 查看当前目录信息pwd   查看当前路径-->查看你在哪里? /root:主目录相当于手机里面home键 mkdir 创建目录,新建文件夹Shell命令格式: 命令+选项+路径(参数)      在......
  • Linux的基本命令
    1.linux的版本 Ubuntu、CentOS、Redhat、Debian、suse-Linux、鸿蒙(HarmonyOS)。鸿蒙系统是一款全新的面向全场景的分布式操作系统,以手机操作为主,链接汽车、智能音箱、可穿戴等设备的分布式操作系统。与Android等系统具有根本性不同,HarmonyOS创新多设备交互,让消费者操控多个......