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

Shell脚本实战指南:从零基础到自动化高手

1. Shell脚本入门从Hello World到实战第一次接触Shell脚本时我和大多数人一样被那些神秘的符号和命令搞得一头雾水。直到我意识到Shell脚本其实就是把平时在终端里手动输入的命令写进一个文件里自动执行。举个例子每天早上我都要手动检查服务器磁盘空间、备份日志文件、发送报告邮件这些重复性工作完全可以用几行脚本搞定。让我们从最经典的Hello World开始。创建一个名为hello.sh的文件#!/bin/bash echo Hello World保存后给文件添加执行权限chmod x hello.sh执行脚本有两种方式直接运行./hello.sh需要执行权限通过解释器运行bash hello.sh不需要执行权限我刚开始时经常忘记第一行的#!/bin/bash称为shebang结果脚本用默认的sh解释器运行导致一些bash特有的语法报错。这个细节让我调试了半天所以特别提醒新手注意。2. Shell变量让你的脚本活起来变量是Shell脚本的灵魂。有一次我需要批量重命名几百个日志文件手动操作太痛苦用变量配合循环几分钟就搞定了。系统变量可以直接使用$HOME用户家目录$PWD当前工作目录$USER当前用户名自定义变量的规则等号两边不能有空格nameJohn正确name John错误变量名区分大小写$var和$VAR是两个变量默认都是字符串类型count12会保存为字符串12一个实用技巧用readonly声明常量防止误修改readonly MAX_RETRY3环境变量可以让子进程访问export DB_HOST127.0.0.1我曾在脚本中用了大量未导出的变量导致调用的子脚本获取不到值排查了很久才发现这个问题。3. 流程控制让脚本学会做决策3.1 if条件判断处理服务器监控时我经常用if判断各种状态if [ $CPU_USE -gt 90 ]; then echo CPU使用率过高 | mail -s 警报 adminexample.com elif [ $MEM_USE -gt 80 ]; then echo 内存不足 else echo 系统正常 fi注意点条件表达式[ ]两边必须有空格比较数字用-eq、-gt等字符串用可以用和||组合多个条件3.2 case语句当有多个固定选项时case比if更清晰case $1 in start) ./start_server.sh ;; stop) ./stop_server.sh ;; *) echo 用法: $0 start|stop exit 1 ;; esac3.3 循环处理for循环处理文件批量操作特别方便# 重命名所有.log文件 for file in *.log; do mv $file ${file%.log}.bak donewhile循环适合处理不确定次数的操作比如读取文件行while IFS read -r line; do echo 处理: $line done data.txt我曾经用while循环实现了一个简单的守护进程定期检查服务状态并在异常时自动重启。4. 实用Shell工具数据处理三剑客4.1 cut精准切割文本分析nginx日志时我常用cut提取特定字段# 提取访问量前10的IP cut -d -f 1 access.log | sort | uniq -c | sort -nr | head -10参数说明-d指定分隔符默认制表符-f选择第几列支持1,3,5这种格式4.2 sed流式文本编辑批量替换配置文件中的IP地址sed -i s/192.168.1.100/10.0.0.1/g *.conf常用操作s/old/new/g全局替换/pattern/d删除匹配行3a\text在第3行后插入文本4.3 awk强大的文本分析统计日志中不同状态码的出现次数awk {status[$9]} END {for(s in status) print s, status[s]} access.logawk的优势在于自动按列处理默认空格分隔支持数组和计算内置变量如NR行号、NF字段数5. 实战案例自动化部署脚本下面分享一个我实际在用的Web应用部署脚本#!/bin/bash # 配置变量 readonly APP_NAMEmyapp readonly BACKUP_DIR/backup readonly DEPLOY_DIR/var/www/$APP_NAME # 检查参数 if [ $# -ne 1 ]; then echo 用法: $0 版本号 exit 1 fi VERSION$1 TAR_FILE$APP_NAME-$VERSION.tar.gz # 检查文件是否存在 if [ ! -f $TAR_FILE ]; then echo 错误: 文件 $TAR_FILE 不存在 exit 1 fi # 创建备份 echo 创建备份... tar -czf $BACKUP_DIR/$APP_NAME-$(date %Y%m%d).tar.gz $DEPLOY_DIR 2/dev/null # 停止服务 systemctl stop $APP_NAME # 解压新版本 echo 部署新版本... rm -rf $DEPLOY_DIR/* tar -xzf $TAR_FILE -C $DEPLOY_DIR # 设置权限 chown -R www-data:www-data $DEPLOY_DIR find $DEPLOY_DIR -type d -exec chmod 755 {} \; find $DEPLOY_DIR -type f -exec chmod 644 {} \; # 启动服务 systemctl start $APP_NAME echo 部署完成这个脚本实现了参数检查自动备份服务启停权限设置状态反馈6. 调试技巧与最佳实践6.1 调试方法我常用的调试手段set -x显示执行的每行命令set -e遇到错误立即退出echo $?检查上条命令的返回值#!/bin/bash set -ex # 你的脚本内容6.2 代码规范好的Shell脚本应该添加清晰的注释使用有意义的变量名处理各种错误情况添加日志记录限制脚本权限6.3 性能优化处理大文件时避免频繁的文件IO使用管道连接多个命令考虑使用更高效的工具如awk替代grepcut7. 进阶技巧函数与模块化当脚本超过100行时就该考虑用函数了#!/bin/bash # 日志函数 log() { echo [$(date %Y-%m-%d %H:%M:%S)] $1 } # 检查依赖 check_deps() { for cmd in jq aws curl; do if ! command -v $cmd /dev/null; then log 错误: $cmd 未安装 exit 1 fi done } # 主函数 main() { check_deps log 开始执行... # 业务逻辑 } main $这样组织代码更易维护也方便复用。我曾经把一个300行的监控脚本拆分成多个函数文件通过source引入使主脚本变得非常简洁。8. 安全注意事项写Shell脚本要特别注意安全永远验证用户输入使用$var引用变量防止空格和特殊字符设置合理的文件权限敏感信息不要硬编码在脚本中使用rm -rf时要格外小心一个真实教训我曾写过一个清理临时文件的脚本因为变量未加引号当路径包含空格时误删了重要文件。现在我会这样写# 安全做法 find /tmp/my app -name *.tmp -delete # 危险做法 rm -rf /tmp/my app/* # 如果$DIR包含空格会出问题

相关文章:

Shell脚本实战指南:从零基础到自动化高手

1. Shell脚本入门:从Hello World到实战 第一次接触Shell脚本时,我和大多数人一样,被那些神秘的符号和命令搞得一头雾水。直到我意识到,Shell脚本其实就是把平时在终端里手动输入的命令,写进一个文件里自动执行。举个例…...

OpenClaw 生态全景图——AI 助理如何改变工作方式

OpenClaw 生态全景图——AI 助理如何改变工作方式摘要:2026 年,AI 助理从"玩具"变成"工具"。本文带你了解 OpenClaw 生态系统的完整布局,看它如何连接微信、飞书、钉钉等主流平台,以及企业和个人如何利用它提…...

CANopen协议实战指南:从对象字典到PDO映射

1. CANopen协议入门:从零理解工业通信基石 第一次接触CANopen协议时,我被它复杂的术语和抽象的概念搞得晕头转向。直到在某个电机控制项目中被迫深入使用后,才发现这套协议设计得如此精妙。CANopen本质上是一种建立在CAN总线上的应用层协议&a…...

pnpm+turbo迅速搭建monorepo工程

关于monorepo monorepo 并不是一个框架、一个包、一个依赖。而是一种单仓库多包管理模式,也是基于中心化思想的实践产物。 举个例子,假设我们现在有6个项目,传统的项目管理方式(Multirepo)会按照6个代码仓库去管理&a…...

3步精通Calibre电子书转换:从格式兼容到专业排版指南

3步精通Calibre电子书转换:从格式兼容到专业排版指南 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre 在数字阅读时代,电子书格式碎片化…...

告别论文格式内耗!从标题层级到参考文献,这款工具一键搞定全流程合规排版

在学位论文撰写中,标题层级混乱、页眉页脚错位、参考文献格式不统一、图表排版杂乱是贯穿全文的高频痛点,堪称学术写作的 “格式重灾区”。传统 Word/WPS 依赖手动刷样式、调格式,耗时数小时还易反复出错;LaTeX 门槛高、中文适配差…...

YOLOv12:以注意力机制重塑实时目标检测的精度与速度边界

1. YOLOv12如何重新定义实时目标检测 当你在手机上刷短视频时,那些自动标记出人物、宠物和物品的方框;当你在超市自助结账时,摄像头快速识别商品的过程;当自动驾驶汽车实时判断前方路况时——这些场景背后都有一个共同的技术支撑&…...

Qwen3-TTS开源模型快速上手:5分钟完成中文普通话+粤语+英文三语语音合成

Qwen3-TTS开源模型快速上手:5分钟完成中文普通话粤语英文三语语音合成 想不想让你的应用开口说话?不是那种机械的电子音,而是像真人一样,有感情、有语调,甚至能说方言的语音?今天要聊的Qwen3-TTS&#xff…...

Nacos 2.2.0连接达梦数据库踩坑实录:从驱动版本到SQL脚本的完整避坑指南

Nacos 2.2.0与达梦数据库深度适配实战:从驱动选型到容器化部署的全链路解析 当微服务架构遇上国产数据库,技术适配的每个环节都可能成为关键战场。最近在将Nacos 2.2.0与达梦数据库进行生产级适配时,我经历了从驱动版本冲突到SQL脚本优化的完…...

基于RexUniNLU的Linux系统日志智能分析方案

基于RexUniNLU的Linux系统日志智能分析方案 1. 引言 每天面对海量的Linux系统日志,是不是感觉头大?服务器突然卡顿,排查问题就像大海捞针,一行行翻日志看得眼睛都花了。传统的关键词搜索和正则匹配已经跟不上现代运维的需求&…...

Skills 如何高效地扩展 Claude 的能力

在模块化配置体系中,rules(规则)决定了 Claude 的下限(不能搞砸什么),而 skills(技能)则决定了 Claude 的上限(能多快、多准地完成复杂任务)。高效扩展 Claud…...

PyTorch 2.5镜像体验:预装全套工具,让AI项目开发效率翻倍

PyTorch 2.5镜像体验:预装全套工具,让AI项目开发效率翻倍 1. 为什么选择预装环境的PyTorch镜像? 深度学习项目开发中,最令人头疼的往往不是算法设计或模型调优,而是环境配置这个看似简单却暗藏玄机的工作。想象一下这…...

DeOldify API速率限制:令牌桶算法实现每用户每小时1000次调用

DeOldify API速率限制:令牌桶算法实现每用户每小时1000次调用 1. 为什么需要API速率限制 在构建基于DeOldify的图像上色服务时,我们面临一个重要的技术挑战:如何公平合理地分配计算资源。深度学习模型推理需要消耗大量的GPU计算资源&#x…...

动态规划 -- 最长公共子序列

最长公共子序列的结构设序列 X{x1,x2,…,x m} 和 Y{y1,y2,…,y n} 的最长公共子序列为 Z{z1,z2,…,z k},则有以下结论:若 x my n,则 z kx my n,且 Z k−1(即 Z 去掉最后一个元素 z k 后的子序列)是 X m−1&…...

OpCore Simplify:自动化OpenCore EFI配置的革命性工具

OpCore Simplify:自动化OpenCore EFI配置的革命性工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款专为Hackinto…...

玩转西门子S7-1200气力输送仿真系统

气力输送系统管道气力输送系统 (21)采用西门子S7-1200博图WinCC画面组态,博图V16及以上版本都可以仿真运行,无需硬件。 系统带有手动/自动模式,运行数据动态实时显示,带压力实时曲线显示&#x…...

TikTok GMXMAX广告优化全攻略

在2026年,TikTok广告投放逐渐向自动化模型演进,其中GMX MAX(GMV Max)成为很多团队用来提升ROI和放量的重要方式。相比传统广告模式,它可以自动完成受众匹配与预算分配,减少大量人工干预。不过在实际操作中&…...

单细胞分析进阶:手把手教你用hdWGCNA挖掘Treg细胞关键基因模块(附完整代码)

单细胞分析进阶:手把手教你用hdWGCNA挖掘Treg细胞关键基因模块(附完整代码) 在免疫微环境中,调节性T细胞(Treg)扮演着维持免疫平衡的关键角色。理解这些细胞的基因共表达网络对于揭示其功能机制至关重要。本…...

Anthropic泄露新一代Claude Mythos 模型,具备网络安全漏洞检测优势

配置错误曝光新模型Anthropic PBC 内容管理系统的一处配置错误意外泄露了其正在测试的新型大语言模型 Claude Mythos。该公司周四向《财富》杂志证实,工程师已完成该模型的训练工作,目前正与早期客户进行试点测试。Anthropic 强调这是其"迄今为止构…...

OpCore Simplify:革新黑苹果配置流程——从繁琐到智能的EFI构建方案

OpCore Simplify:革新黑苹果配置流程——从繁琐到智能的EFI构建方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款…...

北海特色美食哪家好

在北海,海鲜始终是餐桌上最核心的语言,但从风味调性来看,无论是早市现捞的海虾、生蚝,还是北部湾的鳗鱼、鲍鱼,呈现出的多为“鲜甜”“咸鲜”这类闽粤沿海常见的味觉模式。游客在选择时往往面临两个现实:一…...

HFSS19 实战解析:SMA接头馈电的微带分支滤波器仿真

1. SMA接头与微带分支滤波器设计基础 作为一名射频工程师,设计紧凑型滤波器是日常工作的重要部分。这次我们要用HFSS19仿真一个SMA接头馈电的微带分支带通滤波器。先说说为什么选择这个组合:SMA接头是射频电路中最常见的连接器之一,工作频率可…...

3步掌握MelonLoader:面向Unity开发者的游戏扩展加载器实战指南

3步掌握MelonLoader:面向Unity开发者的游戏扩展加载器实战指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader Unit…...

SDMatte提示词库共建:分享与收集高效抠图的魔法指令

SDMatte提示词库共建:分享与收集高效抠图的魔法指令 1. 为什么需要提示词库 抠图是设计工作中最常见的需求之一,但每次都要从头开始描述需求既费时又低效。这就好比每次做饭都要从认识食材开始,而不是直接使用现成的菜谱。SDMatte作为智能抠…...

3步告别音乐APP的广告轰炸,这款开源工具让你回归纯粹聆听

3步告别音乐APP的广告轰炸,这款开源工具让你回归纯粹聆听 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特!(密码重置功能已回归) 项目地址: https://gitcode.com/GitHub_Tre…...

MedGemma-X镜像轻量化:去除冗余依赖+精简日志+压缩缓存的体积优化实践

MedGemma-X镜像轻量化:去除冗余依赖精简日志压缩缓存的体积优化实践 1. 引言:为什么需要优化MedGemma-X镜像? 如果你已经体验过MedGemma-X的强大功能——那种像专业医生一样“对话式”阅片的智能体验,可能会发现一个现实问题&am…...

快速掌握Fast-F1:Python赛车数据分析终极指南

快速掌握Fast-F1:Python赛车数据分析终极指南 【免费下载链接】Fast-F1 FastF1 is a python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry 项目地址: https://gitcode.com/GitHub_Trending/fa/Fast-F1 想要…...

使用Python运行VirtualLab Fusion光学仿真

摘要 VirtualLab Fusion允许Python外部访问其建模技术、求解器和结果。这个用例介绍了一种使用路径变量和Visual Studio代码将Python连接到VirtualLab Fusion的简单方法。在本示例中,我们将演示如何使用Python脚本运行光学仿真,以向用户简要概述这种跨…...

影刀RPA与Python变量管理:全局与局部变量的实战应用

1. 全局变量与局部变量的核心区别 在影刀RPA中编写Python脚本时,变量管理是影响代码质量的关键因素。全局变量就像办公室的公告板,所有部门(函数)都能看到并修改;而局部变量则是员工个人笔记本上的临时记录&#xff0c…...

FreeRTOS任务切换时,Cortex-M内核的PSP和MSP指针到底怎么变?一个动画讲清楚

FreeRTOS任务切换时Cortex-M内核PSP与MSP指针变化全解析 当你在调试一个嵌入式系统时,突然遇到栈溢出导致的崩溃,那种感觉就像在黑夜里摸索——你知道问题出在哪里,但就是看不清细节。作为一名嵌入式开发者,理解FreeRTOS在Cortex-…...