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/10/27 5:53:14 阅读更多 →
Electron应用内存优化实战:QQ桌面版重构经验

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

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

2026/10/28 18:10:07 阅读更多 →
R语言在统计计算与数据分析中的核心优势与未来展望

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

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

2026/10/25 4:08:18 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/28 16:58:40 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/27 19:19:37 阅读更多 →