当前位置: 首页 > article >正文

别再手动敲命令了!用Shell的Here Document(EOF)自动化你的SFTP/MySQL登录操作

告别重复输入用Here Document实现命令行自动化每次登录SFTP服务器都要手动输入密码数据库操作总得反复敲命令运维工程师的日常被这些重复劳动占据了大半时间。Here Document技术正是为解放你的双手而生——这种源自Unix传统的脚本编写技巧能让交互式命令行操作像流水线一样自动执行。想象一下原本需要人工值守的SFTP文件传输现在只需一个脚本就能完成认证、跳转目录、上传下载全套流程往常必须逐条输入的SQL查询如今可以批量自动执行。这不仅仅是效率的提升更是工作方式的革新。1. Here Document技术解析Here Document常被简称为Heredoc是Shell脚本中的一种特殊重定向方式它允许我们在脚本中直接嵌入多行文本作为命令的输入。其核心语法结构非常简单命令 分隔符 输入内容 ... 分隔符这个看似简单的语法背后却蕴含着强大的自动化潜力。当Shell遇到操作符时会将其后指定的分隔符通常用EOF表示作为输入结束的标记直到再次遇到相同的分隔符为止中间的所有内容都会被作为标准输入传递给前面的命令。与传统的交互式操作相比Here Document带来了三个显著优势无人工干预认证信息和操作指令全部预置在脚本中可重复执行相同操作无需重复输入确保一致性错误率降低避免了手动输入可能导致的拼写错误提示虽然EOF是最常用的分隔符但你可以使用任何不包含在输入内容中的字符串作为分隔符比如END、STOP等。2. SFTP自动化实战对于需要定期从远程服务器下载日志文件或上传备份的运维人员来说SFTP的交互式操作尤其耗时。下面我们通过一个完整的例子展示如何用Here Document实现全自动SFTP操作#!/bin/bash HOSTexample.com USERbackupuser PASSsecurepassword123 REMOTE_DIR/var/log/nginx LOCAL_DIR/backup/nginx_logs sftp $USER$HOST EOF $PASS cd $REMOTE_DIR get access.log get error.log bye EOF这个脚本实现了以下自动化流程使用预定义的用户名连接SFTP服务器自动输入密码完成认证切换到指定的远程目录下载两个日志文件自动退出SFTP会话安全增强方案将密码直接写在脚本中存在安全风险。更安全的做法是#!/bin/bash read -s -p Enter SFTP password: PASS echo sftp $USER$HOST EOF $PASS cd $REMOTE_DIR lcd $LOCAL_DIR mget *.log bye EOF3. 数据库操作自动化数据库管理是另一个Here Document大显身手的领域。以MySQL为例常规的交互式查询方式效率低下而Here Document可以让批量SQL执行变得轻而易举#!/bin/bash DB_USERadmin DB_PASSdbsecret DB_NAMEinventory mysql -u $DB_USER -p$DB_PASS $DB_NAME EOF SELECT COUNT(*) FROM products WHERE stock 10; UPDATE products SET price price * 1.1 WHERE category electronics; INSERT INTO audit_log (action, table_name) VALUES (price_update, products); EOF对于更复杂的数据库维护任务可以将SQL语句单独保存在文件中然后通过Here Document执行#!/bin/bash SQL_FILE/scripts/init_db.sql mysql -u root -p EOF source $SQL_FILE SHOW TABLES; EOF4. 高级技巧与避坑指南虽然Here Document非常实用但在实际应用中还是有一些需要注意的地方变量扩展问题默认情况下Here Document中的变量会被展开。如果希望保留原始文本比如编写SQL语句时包含$符号可以使用引号包裹分隔符cat EOF 这将保留所有特殊字符 $PATH command EOF缩进处理为了脚本美观我们常希望缩进Here Document内容但默认情况下缩进会被保留。使用-可以忽略前导制表符但不包括空格cat -EOF 这行文本的前导制表符会被忽略 EOF # 注意分隔符前不能有空格常见错误排查表错误现象可能原因解决方案提示未找到分隔符EOF分隔符前后有空格确保EOF单独一行且无空格变量未被展开使用了引号包裹分隔符移除分隔符引号或改用双引号密码认证失败特殊字符未转义对密码中的特殊字符使用反斜杠转义命令未执行缺少执行权限chmod x script.sh5. 综合应用案例让我们看一个结合了条件判断和错误处理的完整自动化示例实现根据日期自动备份MySQL数据库并上传到远程服务器#!/bin/bash # 配置参数 DB_USERdba DB_PASSdbapass BACKUP_DIR/backups TODAY$(date %Y%m%d) REMOTE_HOSTbackup.server REMOTE_USERbackup REMOTE_DIR/mysql_backups # 备份数据库 mysqldump -u $DB_USER -p$DB_PASS --all-databases $BACKUP_DIR/full_$TODAY.sql # 检查备份是否成功 if [ $? -ne 0 ]; then echo 数据库备份失败 2 exit 1 fi # 上传到远程服务器 sftp $REMOTE_USER$REMOTE_HOST EOF cd $REMOTE_DIR put $BACKUP_DIR/full_$TODAY.sql bye EOF # 清理7天前的备份 find $BACKUP_DIR -name *.sql -mtime 7 -exec rm {} \;这个脚本展示了Here Document如何与其他Shell功能结合构建出完整的自动化解决方案。在实际项目中可以进一步添加邮件通知、日志记录等功能打造更完善的运维工具链。

相关文章:

别再手动敲命令了!用Shell的Here Document(EOF)自动化你的SFTP/MySQL登录操作

告别重复输入:用Here Document实现命令行自动化 每次登录SFTP服务器都要手动输入密码?数据库操作总得反复敲命令?运维工程师的日常被这些重复劳动占据了大半时间。Here Document技术正是为解放你的双手而生——这种源自Unix传统的脚本编写技巧…...

League Akari终极指南:英雄联盟玩家的智能游戏助手完整教程

League Akari终极指南:英雄联盟玩家的智能游戏助手完整教程 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟的繁琐操…...

1、Chrome Elements面板:从入门到精通的网页调试实战指南

1. Chrome Elements面板:你的网页调试瑞士军刀 第一次打开Chrome开发者工具时,那个标着"Elements"的标签页看起来就像是一堆杂乱无章的HTML代码。但当我真正开始理解它的功能后,它迅速成为了我每天使用最频繁的开发工具。Elements面…...

如何用WeChatMsg永久备份微信聊天记录?3步完成数据存档与深度分析

如何用WeChatMsg永久备份微信聊天记录?3步完成数据存档与深度分析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trendi…...

告别虚拟机臃肿:用QEMU用户模式(qemu-user)快速运行跨架构程序的完整指南

告别虚拟机臃肿:用QEMU用户模式(qemu-user)快速运行跨架构程序的完整指南 在开发跨平台应用或研究嵌入式系统时,开发者经常需要处理不同CPU架构的二进制文件。传统解决方案是启动完整的虚拟机,但这会消耗大量系统资源&…...

5分钟掌握ViGEmBus:Windows游戏控制器模拟终极指南

5分钟掌握ViGEmBus:Windows游戏控制器模拟终极指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款强大的Windows内核级驱动程序&…...

智慧树刷课插件:3分钟实现自动播放,彻底告别手动刷课烦恼!

智慧树刷课插件:3分钟实现自动播放,彻底告别手动刷课烦恼! 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台繁琐的手…...

QML WebEngine与ECharts联袂:打造高性能实时数据可视化桌面应用

1. 为什么选择QMLWebEngineECharts组合? 在开发桌面端实时数据可视化应用时,我们常常面临一个关键选择:是使用原生绘图方案还是Web技术栈?我经过多个工业监控项目的实战验证,发现QMLWebEngineECharts的组合堪称黄金搭…...

保姆级对比:ESP32 vs ESP8266,在ROS Melodic/Noetic下谁的WiFi通信更稳?实测代码分享

ESP32与ESP8266在ROS环境下的WiFi通信深度评测:从硬件差异到实战优化 1. 硬件架构与性能基准 当我们将ESP32和ESP8266这两款WiFi模块置于ROS机器人开发环境中对比时,首先需要理解它们的硬件设计差异如何影响实际性能表现。ESP32采用双核Xtensa LX6架构&a…...

UE4项目里用Lua写逻辑,我踩过的坑和高效配置(VSCode+Emmylua)

UE4项目中用Lua开发的高效避坑指南:从VSCode配置到实战技巧 当Unreal Engine 4项目规模逐渐扩大,纯蓝图和C的开发模式开始暴露出编译时间长、热更新困难等问题。这时引入Lua作为脚本语言成为许多团队的选择。但实际开发中,从环境搭建到编写可…...

学术研究者的数字工具困境:如何打通文献管理与知识沉淀的壁垒?

学术研究者的数字工具困境:如何打通文献管理与知识沉淀的壁垒? 【免费下载链接】notero A Zotero plugin for syncing items and notes into Notion 项目地址: https://gitcode.com/gh_mirrors/no/notero 在当今数字化研究时代,学术工…...

语音驱动AI智能体:Flutter动态UI与OpenClaw网关实践

1. 项目概述:一个完全解放双手的AI智能体编排器如果你和我一样,经常在通勤路上、跑步时,或者双手被占用(比如在厨房做饭、在工位上焊接电路板)的时候,脑子里突然蹦出一个需要AI助手处理的任务,但…...

GitHub 开源育儿知识库:技术型父母如何用 Awesome List 构建科学育儿体系

1. 项目概述:一个为新手父母量身定制的技能宝库当一个小生命降临,新手父母们常常会陷入一种既幸福又焦虑的复杂情绪中。幸福自不必说,那份焦虑则大多源于“未知”——面对一个不会说话、只会用哭声表达一切的小家伙,如何判断他是饿…...

番茄小说下载器完整教程:如何轻松保存全网小说到本地

番茄小说下载器完整教程:如何轻松保存全网小说到本地 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 想要永久保存番茄小说平台上的精彩作品吗?这款免费开源的番茄小…...

从单点到集群:我的SkyWalking 6.6.0 + ES7 + Nacos生产环境平滑升级踩坑记

从单点到集群:SkyWalking 6.6.0 ES7 Nacos生产环境平滑升级实战指南 去年春天,我们的电商大促监控系统突然告警——单节点SkyWalking服务器在流量洪峰下频繁崩溃。那一刻,我意识到单点架构已经成为业务增长的瓶颈。经过三个月的方案验证和灰…...

三步掌握MarkDownload:将网页内容高效转换为结构化笔记

三步掌握MarkDownload:将网页内容高效转换为结构化笔记 【免费下载链接】markdownload A Firefox and Google Chrome extension to clip websites and download them into a readable markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownload …...

产品工程外包战略转型:从成本控制到价值共创

1. 产品工程外包的价值重构:从成本驱动到战略协同十五年前我刚入行IT咨询时,客户开口闭口都是"能省多少钱"。如今在硅谷参与过数十个跨国产品外包项目后,我深刻意识到:把PEO(产品工程外包)单纯看…...

8086/8088单板机VSCode集中环境开发编译(第二版整理)

对于8086/8088单板机而言,集中的开发环境方便友好。下面是使用VSCode集中开发环境对8086/8088单板机集中编辑、编译、串口下载的使用步骤第一步,在VSCode文件中,选择打开例程文件夹第二部,根据需要对例程main.c进行编辑修改第三步…...

Cursor Pro自动化工具:跨平台GUI实现与机器码重置技术解析

1. 项目概述:Cursor Pro 自动化工具的诞生与价值作为一名长期与各类开发工具打交道的程序员,我深知一个趁手的“兵器”对效率的提升有多关键。Cursor,这款集成了强大AI能力的代码编辑器,凭借其智能补全、代码解释和重构功能&#…...

AI架构绘图副驾驶:用自然语言生成专业Excalidraw架构图

1. 项目概述与核心价值 如果你和我一样,每天都要面对陌生的、动辄几十个微服务的复杂代码库,或者需要向团队解释一个新系统的设计,那你一定理解那种“认知过载”的痛苦。在脑海里构建整个系统的架构图,试图理清服务间的调用关系和…...

CTFd平台自动化管理:基于MCP协议的插件开发与集成实践

1. 项目概述:CTFd与MCP的融合实践最近在搭建和维护CTF(Capture The Flag,夺旗赛)平台时,我遇到了一个挺有意思的项目:AaryaBhusal/ctfd-mcp。简单来说,这是一个为CTFd平台设计的MCP(…...

开源治理新范式:Gitee CodePecker SCA如何重塑企业软件供应链安全防线

开源治理新范式:Gitee CodePecker SCA如何重塑企业软件供应链安全防线 当Log4j漏洞席卷全球时,企业第一次意识到开源组件的安全风险可能比想象中更近。据Sonatype《2023年软件供应链状态报告》显示,过去一年中针对开源组件的攻击同比增长了65…...

从零到一:在云端服务器安全部署Jupyter Lab/Notebook

1. 云端服务器基础环境准备 刚拿到一台全新的云服务器时,就像搬进毛坯房需要先通水电。我以阿里云ECS为例(其他云服务商操作类似),从系统初始化到基础安全加固,带你走完这段必经之路。 首先用SSH连接服务器时&#xff…...

算法基础(十一)—— 递归树如何看懂分治算法的运行时间

1. 定位导航 前面已经学习了分治思想: 分解 → 解决 → 合并分治算法经常可以写成递归式。 例如归并排序: 先把数组拆成左右两半; 分别排序左右两半; 再合并两个有序数组。它的运行时间可以粗略写成: T(n)2T(n/2)n T(n…...

Home Assistant新手避坑实录:搞定易微联Sonoff插座的devicekey和那些奇怪的Python报错

Home Assistant实战:易微联Sonoff插座接入全流程与疑难解析 第一次打开Home Assistant后台时,那个简洁的界面让我误以为智能家居搭建会像拼乐高一样简单——直到遇见易微联Sonoff插座。这个白色的小方块成了我智能家居之路上的第一块绊脚石,…...

Bluekit AI钓鱼工具包深度解析:40+品牌DOM级复刻+98%2FA绕过率的工业化攻击革命

摘要 2026年4月底,安全厂商Varonis曝光了一款名为Bluekit的AI驱动全链路工业化钓鱼工具包,它标志着网络钓鱼攻击正式进入"零门槛、高成功率、大规模量产"的AI工业化时代。本文将从技术原理、攻击流程、反检测机制三个维度深度解析Bluekit的核…...

All-in-One Telegram机器人:加密货币监控与多功能集成部署指南

1. 项目概述 如果你和我一样,是个喜欢折腾各种效率工具,同时又对加密货币市场保持关注的玩家,那你肯定也经历过这样的场景:手机里塞满了各种功能的机器人——一个用来监控币价,一个用来下载视频,一个用来处…...

基于Ubuntu与Docker构建私有化文档协同平台:DzzOffice集成OnlyOffice实战

1. 为什么需要私有化文档协同平台 最近几年,越来越多的企业开始重视数据安全和隐私保护。我接触过不少中小企业客户,他们最头疼的问题就是:既想要像Google Docs那样的实时协作体验,又担心把商业文档存在第三方云平台的风险。这就是…...

终极指南:如何使用Chrome插件markdownReader提升Markdown阅读体验

终极指南:如何使用Chrome插件markdownReader提升Markdown阅读体验 【免费下载链接】markdownReader markdownReader is a extention for chrome, used for reading markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownReader 还在为浏览器…...

如何利用TortoiseSVN高效生成分支对比与历史变更的差异报告

1. TortoiseSVN简介与差异报告的价值 版本控制系统就像代码的时光机,它能完整记录每次修改的"快照"。我在团队协作中深刻体会到,没有比清晰的变更记录更能提高代码审查效率的工具了。TortoiseSVN作为Subversion的Windows客户端,最…...