Shell 脚本语言学习笔记
一、基础命令1. echo 命令echo命令用于在屏幕上显示信息也可以将内容输出到文件。echotest# 在屏幕上输出 testechotest1.txt# 将 test 输出到 1.txt 文件中覆盖写入echotest1.txt# 将 test 输出到 1.txt 文件中追加写入cat1.txt# 将 1.txt 文件的内容输出到屏幕上说明如果文件不存在则创建如果文件存在则覆盖文件内容如果文件不存在则创建如果文件存在则追加文件内容2. 数据检索和编辑命令netstat-nltp# 显示所有监听端口和已连接端口包括进程IDnetstat-nltp|grep80# 显示包含 80 端口的连接信息3. 行检索命令grep801.txt# 在 1.txt 文件中检索包含 80 的行4. 字符串检索awk{print $1}work/com/1.txt# 打印该文件每行的第一列字段5. 交互式与非交互式命令类型命令说明交互式vim 1.txt在 vim 编辑器中打开 1.txt 文件非交互式sed -i s/test/123/g 1.txt直接修改文件内容全局替换sed 命令说明sed-is/test/123/g1.txt# -i直接修改文件内容# s替换命令# g全局替换global二、脚本基础1. 脚本文件规范Shell 脚本以.sh或.bash结尾脚本中#表示注释不会执行脚本首行指定解释器#!/bin/bash2. 执行脚本的方式bash1.sh# 方式一使用 bash 命令执行chmodx1.sh# 方式二先添加执行权限./1.sh# 然后直接执行三、变量1. 变量命名规则变量名只能以字母或下划线开头变量名只能包含字母、数字和下划线变量名不能以数字开头2. 变量定义与使用a10# 定义变量 a赋值为 10echo$a# 输出变量 a 的值即 10echoa# 输出字符串 a而不是变量值a$b# 将变量 b 的值赋值给变量 aecho$a# 输出变量 a 的值即 b 的值3. 时间变量shijian$(date)# 将当前时间赋值给变量 shijianecho$shijian# 输出当前时间shijian$(date%y%m%d_%H%M%S)# 格式年月日_时分秒echo$shijiantime$(date%y年%m月%d日_%H时%M分%S秒)# 中文格式echo$time四、脚本案例案例 1服务器初始化配置功能关闭 SELinux、防火墙、安装常用软件#!/bin/bash# 作者张三# 日期2023-08-01# 描述服务器初始化配置脚本# 版本1.0.0setenforce0# 关闭 SELinux 强制模式sed-is/enforcing/disabled/g/etc/selinux/config# 修改 SELinux 配置文件echo已关闭 selinuxsystemctl stop firewalld# 关闭防火墙服务systemctl disable firewalld# 禁用防火墙服务开机自启echo已关闭防火墙yuminstallvimtarunzipnet-toolswgetnginx php php-fpm php-zip php-gd php-intl php-mysqlnd-y# yum 安装常用软件包echo已安装常用软件echo已完成服务器初始化配置!案例 2自动备份双副本数据库功能每天凌晨自动备份数据库压缩后存储到本地和 NFS 共享服务器清理 30 天前的本地备份#!/bin/bash# FileName: dbbackup.sh# Version: 1.0# Date: 2025-07-06# Author: baige# Description: the script for backup mysql of opencartshijiandate%y%m%d_%H%M%S# 注意使用反引号 执行命令# 数据库备份# -u用户名 -p密码 数据库名 备份文件路径mysqldump -uroot!-p2wsx#EDC oc202505 /beifen/opencart.sql 2 /dev/null# 2 /dev/null将错误输出重定向到空设备不显示任何信息# 压缩备份文件并删除原文件tar-czf/beifen/yasuo-$shijian.tar.gz /beifen/opencart.sql --remove-files2/dev/null# -czf创建压缩文件c-create, z-gzip, f-file# --remove-files压缩后删除原文件# 同步到 NFS 共享服务器双保险rsync/beifen/* /mnt/nfs_share# 删除本地 30 天前的备份文件find/beifen/-mtime30|xargsrm-rf# -mtime 30修改时间超过 30 天的文件# 记录日志echowell done! 备份时间为$shijian/shell/beifen.log验证方法chmodx dbbackup.sh# 给脚本添加执行权限./dbbackup.sh# 执行脚本# 查看本地备份目录ls-alh# 显示所有文件包括隐藏文件长格式人类可读大小# 查看共享目录信息df-hT# 显示文件系统类型、已用空间、总空间、可用空间、已用率# 查看日志文件cat/shell/beifen.log# 显示备份日志内容案例 3自动化部署邮件服务功能输入邮箱账户和授权密码一键完成邮件服务部署#!/bin/bash# FileName: smtp.sh# Version: 1.0# Date: 2025-07-07# Author: baige# Description: the script for smtp configuration# 提示邮箱需要开启 SMTP 服务并获取授权码read-p请输入邮箱服务商 [163/qq/126]: provider# 读取用户输入的邮箱服务商read-p请输入邮箱账号: account# 读取用户输入的邮箱账号read-p请输入邮箱授权码: password# 读取用户输入的授权码echo正在安装邮件服务 ... yuminstallmailxsendmail-y/dev/null# 安装 mailx 和 sendmail 软件包# 配置邮件客户端cat/etc/mail.rcEOF set from$account$provider.com # 设置发件人邮箱地址 set smtpsmtp.$provider.com # 设置 SMTP 服务器地址 set smtp-auth-user$account# 设置邮箱账号 set smtp-auth-password$password# 设置授权密码 set smtp-authlogin # 设置认证方式 EOFsystemctl startsendmail# 启动 sendmail 服务测试方法echo测试内容|mail-s测试主题baige_zhynet189.cn# -s指定邮件主题# 将测试内容发送到指定邮箱案例 4自动化监测恶意访问功能每小时检查 Web 访问日志统计访问次数最多的 IP如果超过 10000 次则发送邮件告警fwqcat/etc/hostname# 获取服务器主机名zdljsawk{print $1}/shell/log/access.log|sort-n|uniq-c|sort-rn|head-1|awk{print $1}# awk {print $1}提取 IP 地址# sort -n排序# uniq -c去重并统计次数# sort -rn按次数从大到小排序# head -1取访问次数最多的记录# awk {print $1}提取访问次数gjipawk{print $1}/shell/log/access.log|sort-n|uniq-c|sort-rn|head-1|awk{print $2}# awk {print $2}提取 IP 地址# 记录日志echo-e\ndate%m月%d日 %H时%M分最大连接数是$zdljs访问者IP地址是$gjip/shell/log/anti-dos.log# 判断是否超过阈值并发送告警if[$zdljs-gt10000]thenecho警告,服务器$fwq要炸,连接数达到$zdljs,攻击地址为$gjip|mail-s服务器受 dos 攻击警告baige_zhynet189.cnfi案例 5自动化监测 Nginx 服务功能持续监测 Nginx 服务状态如果异常则自动重启#!/bin/bashwhiletrue# 无限循环doif!netstat-nltp|grep80/dev/null# 判断端口 80 是否正常监听then# Nginx 异常重启服务echo$(date%y年%m月%d日%H时%M分%S秒)- Nginx 停止运行,正在重启 ... |tee-a/shell/log/nginx_error.log systemctl restart nginxelse# Nginx 正常运行echo$(date%y年%m月%d日%H时%M分%S秒)- Nginx 正常运行|tee-a/shell/log/nginx_normal.logfisleep3# 每 3 秒检查一次done相关命令systemctl status nginx# 查看 Nginx 服务状态systemctl restart nginx# 重启 Nginx 服务systemctl stop nginx# 停止 Nginx 服务cat/shell/log/nginx_error.log# 查看异常日志cat/shell/log/nginx_normal.log# 查看正常运行日志五、常用命令汇总命令功能echo输出信息cat显示文件内容grep检索匹配内容awk文本处理sed流编辑netstat网络状态systemctl系统服务管理yum包管理tar文件压缩rsync文件同步find文件查找date日期时间mail邮件发送

相关新闻

2026-2027年GEO监测工具发展趋势与平台选型:从全域声量监测到精细化竞品诊断落地指南

2026-2027年GEO监测工具发展趋势与平台选型:从全域声量监测到精细化竞品诊断落地指南

AI 搜索全面普及后,豆包、DeepSeek、腾讯元宝等智能问答工具,已然成为用户查询、了解品牌信息的首要渠道,传统 SEO 关键词排名、软文铺量的营销玩法效果逐步下滑。在此背景下,GEO(生成式引擎优化)配套监测工…

2026/9/19 18:58:29 阅读更多 →
Electron应用内存优化实战:QQ桌面版重构经验

Electron应用内存优化实战:QQ桌面版重构经验

1. 项目背景与挑战新版QQ桌面版采用Electron框架进行重构,这一技术选型在初期引发了社区对性能表现的担忧。作为一款拥有24年历史的国民级IM应用,QQ桌面版面临着几个关键挑战:产品形态复杂:主面板包含100功能模块,采用…

2026/9/9 23:13:26 阅读更多 →
R语言在统计计算与数据分析中的核心优势与未来展望

R语言在统计计算与数据分析中的核心优势与未来展望

1. R语言的现状与核心价值R语言自1993年诞生以来,已经成为统计计算和数据分析领域不可或缺的工具。作为一个开源项目,R由全球统计学家和程序员共同维护,形成了强大的生态系统。截至2024年,CRAN(Comprehensive R Archiv…

2026/9/19 12:00:42 阅读更多 →

最新新闻

STM32软件SPI驱动1.8寸TFT-LCD完整教程

STM32软件SPI驱动1.8寸TFT-LCD完整教程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 10:22:15 阅读更多 →
PCIe 5.0交换芯片如何破解AI集群GPU互联瓶颈

PCIe 5.0交换芯片如何破解AI集群GPU互联瓶颈

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 10:22:15 阅读更多 →
2026跨部门协同研发管理系统选型指南:避开踩坑实战解析

2026跨部门协同研发管理系统选型指南:避开踩坑实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 10:22:14 阅读更多 →
外贸建站用什么平台好?新手入门避坑指南

外贸建站用什么平台好?新手入门避坑指南

外贸建站用什么平台好?新手入门避坑指南 网站做好了没人访问,这是90%外贸新手最崩溃的时刻。你花了几万块定制开发,页面精美得像杂志,但打开百度或谷歌搜产品,根本找不到你。别慌,这通常不是内容的问题,而是 技术选型 从一开始就错了。…

2026/9/21 9:45:18 阅读更多 →
一个服务器上有两个网站要备案两次吗?源码下载避坑指南

一个服务器上有两个网站要备案两次吗?源码下载避坑指南

一个服务器上有两个网站要备案两次吗?源码下载避坑指南 别再死磕那些丑得令人发指的模板网站了,真的,看着都尴尬。很多新手为了省事,直接去搜“源码下载”,结果装出来的页面配色像上世纪的网吧,布局挤得像早高峰的地铁,客户一眼就能看穿你的不专业。更头疼的是,当你终于搞定两个网站,准备绑上服务器时,卡在了备案…

2026/9/21 9:30:07 阅读更多 →
个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑

个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑

个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑 域名解析报错 502,服务器内存爆满,这种“代码写得好,上线就抓瞎”的尴尬,是不是你写个人博客网页设计论文时的真实写照?很多同学在选题和实操阶段,死磕 CSS 动画或 JS 交互,却对最底层的域名绑定和服务器配置一知半解。…

2026/9/21 9:16:31 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →