Shell脚本编程实战宝典:100个案例带你从小白到高手(保姆级教程)

Shell脚本编程实战宝典:100个案例带你从小白到老司机(系统管理员必备) 各位脚本爱好者注意了!!今天咱们要聊的可是Linux系统里的"万金油"技能——Shell脚本编程。说个真实案例:去年我们公司服务器被挖矿病毒入侵,全靠一段15行的Shell脚本快速定位异常进程,直接挽回百万损失!(后怕.jpg)这玩意学好了,绝对能让你的运维效率翻倍!看完这10个典型案例是不是觉得Shell脚本也没那么难?(其实还有90个案例在我的GitHub仓库)记住:最好的学习方法就是动手实践!遇到问题别慌,多用man# 一行命令统计最常使用的10个命令count++;(这个神级命令建议保存到备忘录。 阅读详情

一、为什么说Shell是程序员的瑞士军刀?(必看)

最近帮学弟排查服务器故障时(CPU莫名飙高的情况),发现他连最基础的进程监控脚本都不会写(震惊.jpg)。这让我意识到,虽然现在Python大行其道,但真正玩转Linux的老司机都知道——Shell脚本才是系统管理的神器!!!

举个真实案例:上个月我们线上服务器遭遇恶意扫描,通过编写20行的Shell脚本(包含netstat+awk+grep组合技),5分钟就锁定了异常IP。这种即时响应能力是其他语言难以比拟的(Python此时还在import各种库呢~)

二、新手避坑指南:这些错误90%的人都犯过

1. 文件路径的隐藏陷阱

# 错误示范 ❌
cd /var/log
grep "error" app.log

# 正确姿势 ✔️
cd /var/log || exit 1
grep -i "error" app.log > /tmp/error.log 2>&1

重点解析:

  • || exit 1防止目录切换失败后继续执行危险操作
  • 重定向标准错误输出(2>&1)避免漏掉关键信息
  • 使用绝对路径更安全(特别是crontab场景)

2. 变量使用的三大天坑

# 典型错误集锦
name = "张三"    # 等号两边不能有空格
echo $name$age   # 未定义变量导致命令拼接异常
rm -rf $dir/*    # 变量未检查直接使用(危险!)

避坑口诀:

  1. 等号紧贴两边(name=“value”)
  2. 双引号包裹变量(echo “${name}”)
  3. 变量检查三步走:
[[ -d "$dir" ]] || { echo "目录不存在"; exit 1; }
[[ -n "$user" ]] || user="default"
readonly config_file="/etc/app.conf"

三、实战案例库(精选TOP10)

案例3:自动封禁暴力破解IP(安全运维必备)

#!/bin/bash
# 自动封禁SSH暴力破解IP
FAILED_LOG="/var/log/auth.log"
ATTEMPTS=5

# 获取可疑IP
grep "Failed password" $FAILED_LOG | awk '{print $(NF-3)}' | sort | uniq -c | while read count ip
do
    if [[ $count -gt $ATTEMPTS ]]; then
        # 检查是否已封禁
        if ! iptables -L INPUT -n | grep -q "$ip"; then
            iptables -A INPUT -s $ip -j DROP
            echo "$(date) 封禁IP:$ip 尝试次数:$count" >> /var/log/iptables_ban.log
        fi
    fi
done

技术要点:

  • awk提取特定字段(NF表示最后一个字段)
  • while循环处理每一行结果
  • iptables规则查重机制
  • 日志记录规范

案例7:智能备份脚本(带过期清理)

#!/bin/bash
BACKUP_DIR="/backups"
MAX_DAYS=30
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

# 创建当日备份
tar -czf $BACKUP_DIR/app_$TIMESTAMP.tar.gz /var/www/html 2>/dev/null

# 清理旧备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +$MAX_DAYS -exec rm {} \;

# 空间不足预警
USAGE=$(df -h $BACKUP_DIR | awk 'NR==2 {print $5}' | tr -d '%')
[[ $USAGE -gt 90 ]] && echo "警告:备份目录使用率已达${USAGE}%" | mail -s "存储告警" admin@example.com

亮点解析:

  • 时间戳命名避免覆盖
  • find命令自动清理过期文件
  • 存储空间智能监控
  • 静默模式处理打包错误

(由于篇幅限制,更多案例已整理成速查表👇)

四、高级技巧:让你的脚本专业度提升200%

1. 信号捕获与优雅退出

trap cleanup SIGINT SIGTERM

cleanup() {
    echo "正在清理临时文件..."
    rm -rf /tmp/temp_*
    exit 1
}

# 模拟长时间任务
sleep 300

应用场景:

  • Ctrl+C终止时执行清理
  • 防止脚本中断导致系统残留
  • 关键操作回滚

2. 并发控制黑科技

# 使用命名管道实现并发控制
FIFO_FILE="/tmp/$$.fifo"
mkfifo $FIFO_FILE
exec 6<>$FIFO_FILE
rm -f $FIFO_FILE

# 设置最大并发数
THREAD_NUM=10
for ((i=0;i<$THREAD_NUM;i++))
do
    echo
done >&6

# 任务示例
for ip in 192.168.1.{1..254}
do
    read -u6
    {
        ping -c1 $ip &>/dev/null && echo "$ip is alive"
        echo >&6
    } &
done

wait
exec 6>&-

原理揭秘:

  • 利用文件描述符实现进程池
  • 命名管道控制并发数量
  • 避免fork炸弹风险

五、调试技巧大全(附赠排错流程图)

调试三板斧:

  1. 语法检查:bash -n script.sh
  2. 执行追踪:bash -x script.sh
  3. 即时调试:
set -e   # 出错立即退出
set -u   # 使用未定义变量时报错
set -o pipefail  # 管道命令失败时捕获错误

排错流程图:

脚本报错 → 查看错误行号 → 检查变量作用域 → 验证命令权限 → 测试边界条件 → 模拟特殊字符 → 检查环境变量 → 确认依赖版本

六、资源推荐(少走弯路必备)

1. 在线验证神器

2. 进阶书籍

  • 《Linux命令行与Shell脚本编程大全》(第三版)
  • 《Bash Cookbook》(O’Reilly出品)

3. 常用函数库

# 颜色输出函数
function color_echo() {
    local color=$1
    shift
    case $color in
        red) echo -e "\033[31m$*\033[0m";;
        green) echo -e "\033[32m$*\033[0m";;
        yellow) echo -e "\033[33m$*\033[0m";;
        *) echo "$*";;
    esac
}

# 使用示例
color_echo red "重要错误!"
color_echo green "操作成功!"

最后叮嘱:看完这篇教程后,强烈建议把/etc目录下的所有*.sh脚本都研究一遍(系统级的教学案例啊!)。坚持每天写1个实用脚本,三个月后你会回来感谢我的(认真脸)~

shell脚本保姆级教程,附赠100个shell脚本案例! 无论是系统运维,还是应用运维,均可分为“**纯手工”—> “脚本化”—> “自动化”—>“智能化”**几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避免重复性操作及风险,另一方面提高执行效率。 在自动化运维的转变过程中,经常使用的可能就是shell脚本了。 很多人认为shell脚本简单,但其实Shell的小脚本却有大智慧。别小看几十行代码,它夹杂着系统设计、代码规范和操作经验等等细节,在建设自动化运维的工作中,还是很值得我们研究学习的。 为了帮助大. 阅读详情

相关推荐

Shell脚本编程实战:从入门到精通(100个经典案例剖析)

(文末彩蛋)需要完整100案例代码包的,评论区留言"我要上车"!不过说真的,最好的学习方式是把这些案例自己重写一遍,调通的过程比看100遍都有用!后来才发现,原来这行被称为"shebang"的声明语句,是脚本的命门所在(超级重要)!后面的分号必须转义!我第一次写的时候漏了反斜杠,结果把整个目录都删了…(别问我是怎么知道的)(危险操作警告)虽然方便,但明文存储密码是大忌!这个语法是删除变量末尾匹配模式的部分,简直是字符串处理的神器!来捕获错误输出,否则打包失败你都不知道怎么回事!看到这里的都是真爱!

pixelpilot1的博客 1429

shell编程100例

1、编写hello world脚本 2、通过位置变量创建 Linux 系统账户及密码 3、备份日志 4、一键部署 LNMP(RPM 包版本) 5、监控内存和磁盘容量,小于给定值时报警 6、猜数字游戏 7、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本) 8、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用 UID 数字对比版本)

Admans的专栏 2万+

100个经典shell脚本让你撸个够!

ss -nutlp | awk '{print $1,$5}' | awk -F"[: ]" '{print "协议:"$1,"端口号:"$NF}' | grep "[0‐9]" | uniq。awk -F= -v x=$addr '$2==x{print "完成..."}' $mountpoint/etc/sysconfig/network‐scripts/ifcfg-$dev。12)编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态, 哪些主机处于关机状态 (for 版本)

wjianwei666的专栏 2132

100 个 Shell 脚本实例,代码清晰拿来就能用,再也不怕写不对了!

无论是系统运维,还是应用运维,均可分为“纯手工”→“脚本化”→ “自动化”→“智能化”几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避免重复性操作...

easylife206的专栏 4401

Shell脚本编程100例

Shell脚本编程100例。 融汇 shell 脚本知识点,集大成之作。 本书实在是学习、进修、面试、居家旅行必备精品!

HP iLO4报错自救指南:Embedded Flash/SD-CARD故障的3种修复方案(附详细截图)

本文详细解析了HP iLO4出现'Embedded Flash/SD-CARD'故障时的3种修复方案,包括快速恢复、固件级修复和硬件级解决方案。通过Diagnostics诊断和Self-Test报告,帮助运维人员高效解决问题,并提供预防性维护建议,确保服务器远程管理功能的稳定性。

weixin_42522953的博客 512

Shell 脚本 100 例

这篇文章介绍了100个实用的Shell脚本案例,涵盖基础操作、系统管理、网络检测和游戏开发等多个方面。这些脚本展示了Shell编程的常见应用场景,适合Linux系统管理员和Shell初学者学习参考

边学边走 1595

Ubuntu离线情况下安装gcc编译器

Ubuntu离线情况下安装gcc编译器1.系统版本2.安装说明3.异常处理 1.系统版本 (1)Ubuntu系统版本:20.04.1LTS; (2)gcc编译器版本:gcc-9.3.0(下载链接为https://download.youkuaiyun.com/download/qq_18350351/13762214); 当前可找到的gcc最新版本为gcc-10,但是笔者在安装gcc-10版本时发现一些依赖项无法安装,因此选取了gcc-9版本。如果是在联网情况下安装,直接使用apt相关的安装指令即可。 2.安装说明 安

GreenHand的博客 3934

运维常用的shell脚本源码

Shell脚本是系统运维工作当中最重要的一部分之一,能够通过编写Shell脚本来自动化执行系统管理任务,提高工作效率,减少出错概率。在这篇文章中,我将介绍运维常用的Shell脚本源码。

派大星的不眠博客 2011

PADS VX2.7学习记录05-PADS Layout设计文件Gerber等输出整理

在“PDF Document”栏中,依次选中除REF-TOP和REF-BOT之外的文件,单击图标,将其余PDF Document文件进行删除,如图所示。然后单击【生成PDF】按钮,即可创建一份PDF格式的位号图。

tianpu2320959696的博客 1025

私彩视频开奖动画直播源码内部核心技术解析及修改可增加后台操控-持续更新文章!

其实在此很感谢能做出H5开奖系统的码农们,而我本人也喜欢分解此类的东西。 因为特殊原因,该东西本人就不做图片展示,以防他人商业化。 借用开奖摇奖代码首先分解首页index文件。代码如下:(后面持续在原有的作品上添加后台操作) 代码里写的//.....是我的注明代码的所需。 ​ &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;...

yugua3837的博客 5996

Shell脚本编程100例实战:从入门到精通(保姆级教程)

总是使用绝对路径(避免脚本在不同目录执行出错)Shell脚本就像瑞士军刀,看起来简单但能解决各种实际问题。多写多练(光看教程是学不会的)善用调试技巧(set -x是你的好朋友)注意安全(特别是处理rm命令时)保持代码可读性(你三个月后还要看得懂)(最后的忠告:永远不要在生产环境直接运行未经测试的脚本!!!

systemseer的博客 2503

密评实战:应用层数据安全防护全解析

本文从实战角度深度解析三级信息系统密评中应用层数据安全防护的核心要点。围绕身份鉴别、访问控制、数据传输与存储安全、不可否认性等关键环节,结合国密算法(SM2/SM3/SM4)与智能密码钥匙等合规技术,提供了从代码审查、日志分析到流量验证的全链路排查方法,助力构建真正符合密评标准的数据安全防线。

weixin_29291185的博客 461

Shell 脚本编程保姆级教程(上)

本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。Shell 脚本(shell script),是一种为 shell 编写的脚本程序。另一种则是,直接运行解释器。

Flag少侠的博客 1万+

AI 大模型在电商精准营销中的应用

例如,对于用户 A 和用户 B,通过比较他们对共同评价过的商品的评分差异来确定相似度。其中,(Gain(D,a))表示特征(a)对数据集(D)的信息增益,(Ent(D))表示数据集(D)的信息熵,(V)表示特征(a)的取值个数,(D^{v})表示特征(a)取值为(v)的样本子集。其中,(sim(A,B))表示用户 A 和用户 B 的相似度,(I)表示用户 A 和用户 B 共同评价过的商品集合,(R_{A,i})和(R_{B,i})分别表示用户 A 和用户 B 对商品(i)的评分。(三)营销活动效果预测。

alittlehippo的博客 1627

基于XDMA 的PCIE读写DDR

基于XDMA 的PCIE读写DDR 概述:   想实现基于FPGA的PCIe通信,查阅互联网各种转载…基本都是对PCIe的描述,所以想写一下基于XDMA的PCIe通信的实现(PCIe结构仅做简单的描述(笔记),了解详细结构移至互联网)。 实现功能:PC通过PCIE读写DDR,同时用户通过逻辑代码可以读取被写入DDR内的数据(我是通过VIO实现DDR任意地址,任意数据大小的读取。)。 实践实践!!! 说明: 参考文档: PCI Express Base Specification Revision 3.0 P

Crazzy_M的博客 1万+

Shell脚本编程实战宝典:100个案例带你从小白到高手(建议收藏)

变量引用的天坑# 错误示范:then... # 当var为空时会报错!# 正确姿势:then...空格敏感症[ $a == $b ] # 错误![ "$a" == "$b" ] # 正确路径中的特殊字符mkdir "奇怪的名字&*" # 一定要加引号!!!(记不住?用shellcheck工具自动检查语法!

matrixmind8的博客 512

DeerFlow 系列教程 第十四篇 | IM 渠道集成——让 DeerFlow 接入飞书、企微、Slack、Telegram

DeerFlow 系列教程 第十四篇本篇教程继续,全面剖析 DeerFlow 的 IM 渠道集成方案。我们将深入理解 Channel 抽象层设计、MessageBus 消息总线机制、ChannelManager 调度循环、四大 IM 平台(飞书、企业微信、Slack、Telegram)的适配实现,以及从 IM 消息到 Agent 响应再到 IM 回复的完整消息流转过程。

weixin_43674738的博客 416

Shell脚本编程100例:从入门到实战的保姆级教程

空格是魔鬼会报错,正确是路径含空格:永远用双引号包裹变量!权限陷阱:脚本开头不加/bin/bash?小心不同Shell解释差异!中文编码:在脚本开头加保平安超时控制:重要操作务必加(亲身经历)曾经有个脚本因为没处理空格,把整个/home目录删了…说多都是泪啊!!!

logicloop的博客 491

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Shell脚本编程实战:从入门到精通的100个经典案例(附代码解析)

空格敏感症每个空格都不能少!建议用[[ ]]代替变量引号陷阱:处理带空格的字符串必须加双引号路径问题:脚本中用绝对路径最安全权限管理chmod设置要合理,生产环境别用777!调试技巧:用set -x开启调试模式,set +x关闭。

foxtrotlab的博客 1719

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Shell 脚本编程保姆级教程(下)

bin/bashdemoFun(){echo "这是我的第一个 shell 函数!echo "-----函数开始执行-----"demoFunecho "-----函数执行完毕-----"

Flag少侠的博客 9413

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

这100个shell脚本案例,你都知道吗?一篇教会你写90%的shell脚本

shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。 shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。 shell脚本中最重要的就是对shell命令的使用与组合,再使用shell脚本支持的一些语言特性,完成想要的功能。 今天给大家分享《shell脚本100例》,包含了90%的shell脚本知识点,想

Dou_Hua_Hua的博客 5309

Shell脚本编程实战宝典:从零开始打造你的系统管家(100个真实场景应用)

写了这么多年Shell脚本,最大的感悟是:不要追求炫技,实用为王!很多看似牛逼的技巧,最后都成了维护的噩梦(别问我怎么知道的…)下次遇到重复操作时,先别急着动手,花5分钟想想能不能写成脚本。相信我,这个时间投资绝对超值!(谁用谁知道)

datadigital的博客 919

【免费下载】 Shell脚本编程实战100例 - Linux学习必备资源

Shell脚本编程实战100例 - Linux学习必备资源 【下载地址】Shell脚本编程实战100例-Linux学习必备资源 Shell脚本编程实战100例 - Linux学习必备资源欢迎来到“Shell脚本编程实战100例”资源页面!对于每一位想要深入学习和掌握Linux系统的朋友们来说,Shell脚本是一项至关重要...

gitblog_06668的博客 1196

【亲测免费】 Shell脚本编程实战100例:Linux学习必备资源推荐

Shell脚本编程实战100例:Linux学习必备资源推荐 【下载地址】Shell脚本编程实战100例-Linux学习必备资源 Shell脚本编程实战100例 - Linux学习必备资源欢迎来到“Shell脚本编程实战100例”资源页面!对于每一位想要深入学习和掌握Linux系统的朋友们来说,Shell脚本是一项至关重要...

gitblog_06614的博客 875
上一篇: 玩转Mathematica的七把金钥匙:手把手教你常用函数操作(实战向)
下一篇: MySQL面试必问的10个基础问题(附详细解析)
syntaxseeker
博客等级 码龄2年 162粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值