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

Shell 编程的高级技巧和实战应用


第一步:高级函数和模块化设计

1.1 高级函数设计
  • 探讨函数的参数处理和默认值设置。
  • 示例:实现一个可以处理可选参数的函数。
#!/bin/bashgreet() {local name=${1:-"World"}  # 如果没有提供参数,使用默认值 "World"echo "Hello, $name!"
}greet           # 输出 "Hello, World!"
greet "Alice"   # 输出 "Hello, Alice!"

输出:

Hello, World!
Hello, Alice!
1.2 模块化脚本设计
  • 介绍如何将脚本拆分为多个模块,并通过 source 命令加载。
  • 示例:创建一个包含多个函数的模块化脚本。
# utils.sh
#!/bin/bashadd() {echo $(( $1 + $2 ))
}subtract() {echo $(( $1 - $2 ))
}
# main.sh
#!/bin/bashsource ./utils.shsum=$(add 5 3)
diff=$(subtract 5 3)echo "Sum: $sum"
echo "Difference: $diff"

输出:

Sum: 8
Difference: 2

第二步:高级文本处理

2.1 深入学习 sed
  • 介绍 sed 的高级用法,如批量替换、插入和删除。
  • 示例:使用 sed 实现批量替换和插入操作。
#!/bin/bashtext="Hello, World! This is a sample text."
echo "$text" | sed 's/World/Shell/g'  # 批量替换# 创建文件并插入新行
echo "$text" > sample.txt
sed -i '1iThis is a new line at the beginning.' sample.txt
cat sample.txt

输出:

Hello, Shell! This is a sample text.
This is a new line at the beginning.
Hello, World! This is a sample text.
2.2 高级 awk 用法
  • 探讨 awk 的高级功能,如字段处理、条件处理和函数。
  • 示例:使用 awk 处理复杂的文本数据。
#!/bin/bash# 创建一个包含多行数据的文件
cat <<EOF > data.txt
Name Age
Alice 30
Bob 25
Charlie 35
EOF# 使用 awk 处理数据
awk 'NR > 1 { print $1, $2 + 1 }' data.txt

输出:

Alice 31
Bob 26
Charlie 36

第三步:性能优化和资源管理

3.1 高效的文件处理
  • 介绍如何通过并行处理和批量操作提高文件处理效率。
  • 示例:使用 xargs 实现并行文件处理。
#!/bin/bash# 创建多个样本文件
for i in {1..5}; doecho "Sample content $i" > file$i.txt
done# 使用 xargs 并行处理文件
ls *.txt | xargs -n 1 -P 5 -I {} sh -c 'cat {} && echo "Processed {}"'

输出:

Sample content 1
Processed file1.txt
Sample content 2
Processed file2.txt
Sample content 3
Processed file3.txt
Sample content 4
Processed file4.txt
Sample content 5
Processed file5.txt
3.2 资源限制和监控
  • 讨论如何在脚本中设置资源限制和监控系统资源使用情况。
  • 示例:使用 ulimit 设置资源限制并监控资源使用。
#!/bin/bash# 限制单个进程的最大文件数
ulimit -n 1024# 创建大量文件测试限制
for i in {1..1024}; dotouch file$i
done# 监控系统资源使用
echo "Memory usage:"
free -mecho "Disk usage:"
df -h

输出:

Memory usage:total        used        free      shared  buff/cache   available
Mem:            7977         518        6349           9        1109        7114
Swap:           2047           0        2047Disk usage:
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   10G   37G  22% /

第四步:综合实战案例

4.1 自动化备份和恢复
  • 创建一个自动化备份和恢复脚本,演示如何处理压缩和解压缩、远程传输等操作。
#!/bin/bash# 自动化备份脚本
backup_dir="/backup"
src_dir="/data"
date=$(date +%F)
backup_file="$backup_dir/$date.tar.gz"# 创建备份
mkdir -p "$backup_dir"
tar -czf "$backup_file" "$src_dir"
echo "Backup completed: $backup_file"# 自动化恢复脚本
restore_dir="/restore"
mkdir -p "$restore_dir"
tar -xzf "$backup_file" -C "$restore_dir"
echo "Restore completed: $restore_dir"

输出:

Backup completed: /backup/2023-07-17.tar.gz
Restore completed: /restore
4.2 日志分析和报警
  • 编写一个脚本自动分析系统日志,并在检测到错误时发送邮件或报警。
#!/bin/bashlog_file="/var/log/syslog"
output_file="/var/log/error_report.txt"# 分析日志并生成报告
grep "ERROR" "$log_file" > "$output_file"
echo "Error report generated: $output_file"# 发送邮件(需要配置 mail 命令)
mail -s "Error Report" admin@example.com < "$output_file"
echo "Error report sent to admin@example.com"

输出:

Error report generated: /var/log/error_report.txt
Error report sent to admin@example.com

相关文章:

Shell 编程的高级技巧和实战应用

第一步&#xff1a;高级函数和模块化设计 1.1 高级函数设计 探讨函数的参数处理和默认值设置。示例&#xff1a;实现一个可以处理可选参数的函数。 #!/bin/bashgreet() {local name${1:-"World"} # 如果没有提供参数&#xff0c;使用默认值 "World"ech…...

VMWare虚拟机如何连接U盘

检查配置 1&#xff09;Win R键&#xff0c;输入services.msc&#xff0c;打开服务。 2&#xff09;将AMware USB Arbitration Services 服务开启&#xff0c;并设置为自动启动&#xff1b; 连接U盘 目前作者了解有两种连接方式&#xff0c;如有其他连接方式&#xff0c;欢…...

【学习笔记】后缀自动机(SAM)

前言 之前对后缀自动机的理解太浅薄了&#xff0c;故打算重新写一篇。 后缀自动机是什么 后缀自动机是一个字符串的所有后缀建起来的自动机。它把所有子串&#xff08;后缀的前缀&#xff09;用 O ( n ) O(n) O(n) 的空间装了起来。后缀自动机的边会构成一个 D A G DAG DA…...

Godot的节点与场景

要深入的理解节点与场景&#xff0c;我们需要跳出这两个概念来看他。说的再直白一些godot本质就是一个场景编辑器&#xff01; 场景的概念应该在我们平时看电影看电视时会经常提到&#xff0c;比如某一个打斗的场景&#xff0c;这个场景可能会被设在某一个街道&#xff0c;那么…...

C++ 学习(2) ---- std::cout 格式化输出

目录 std::cout 格式化输出简介使用成员函数使用流操作算子 std::cout 格式化输出简介 C 通常使用cout输出数据&#xff0c;和printf()函数相比&#xff0c;cout实现格式化输出数据的方式更加多样化&#xff1b; 一方面&#xff0c;cout 作为 ostream 类的对象&#xff0c;该类…...

前端拿不到Long类型成员变量,用@JsonSerialize(using = ToStringSerializer.class)序列化一下

EqualsAndHashCode(callSuper true) Data TableName("la_school_business") Schema(description "商务负责人表") public class SchoolBusiness extends BaseEntity {private static final long serialVersionUID -7124481085999629236L;/*** 商务负责人…...

JWT登录校验流程

jwt令牌的基本概念&#xff1a; 1. JWT&#xff08;JSON Web Token&#xff09; 定义&#xff1a;JWT 是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在各方之间作为 JSON 对象安全地传输信息。它可以被验证和信任&#xff0c;因为它是数字签名的。结构&am…...

yarn安装和部署

文章目录 概述安装部署1.构建项目2.测试3.清理构建目录 小结 概述 yarn是一个快速、可靠和安全的JavaScript包管理工具&#xff0c;由Facebook开发。它被设计用来替代npm&#xff08;Node Package Manager&#xff09;&#xff0c;尽管它与npm在很多方面兼容。yarn提供了以下一…...

Visual Studio的安装教程与使用方法

Visual Studio的安装教程与使用方法 一、Visual Studio的安装教程 1. 准备工作 确认系统要求&#xff1a; 在开始安装Visual Studio之前&#xff0c;请确保您的计算机满足Visual Studio的系统要求这。包括操作系统版本、内存、硬盘空间等。您可以在Visual Studio的官方网站…...

一键换装软件哪个好?6个换装工具让你秒变穿搭达人

#紫色跑道的city穿搭#火了&#xff0c;很多人都开始打卡各种紫色穿搭&#xff0c;展示自己的时尚态度。 但对于没有时间或金钱去精心搭配的我们来说&#xff0c;有没有一种更简单、更快捷的方式&#xff0c;让我们也能轻松跟上潮流呢&#xff1f; 当然有&#xff01;今天&…...

【EtherCAT】Windows+Visual Studio配置SOEM主站——源码配置

目录 一、准备工作 1. Visual Studio 2022 2. Npcap 1.79 3. SOEM源码 二、源码部署 1. 新建Visual Studio工程 2. 创建文件夹 3. 创建主函数 4. 复制源代码 5. 删除无关项 6. 将soem源码添加进工程 7. 添加soem头文件 8. 配置头文件路径 9. 配置静态库和静态库路…...

GPTPDF深度解析:开源文档处理技术全攻略

GPTPDF深度解析&#xff1a;开源文档处理技术全攻略 在数字化信息时代&#xff0c;PDF文件因其稳定性和跨平台兼容性&#xff0c;已成为学术交流、技术文档和电子书籍等领域的首选格式。然而&#xff0c;PDF文档的处理和内容提取一直是一个难题。随着人工智能技术的飞速发展&a…...

网络学习:应用层DNS域名解析协议

目录 一、简介 二、工作流程 一、简介 DNS( Domain Name System)是“域名系统”的英文缩写&#xff0c;是一种组织成域层次结构的计算机和网络服务命名系统&#xff0c;它用于TCP/IP网络&#xff0c;它所提供的服务是用来将主机名和域名转换为IP地址的工作。 同时,DNS…...

7.怎么配置一个axios来拦截前后端请求

首先创建一个axios.js文件 导入我们所需要的依赖 import axios from "axios"; import Element from element-ui import router from "./router"; 设置请求头和它的类型和地址 注意先注释这个url,还没有解决跨域问题,不然会出现跨域 // axios.defaults.…...

Day17_1--AJAX学习之GET/POST传参

AJAX 简介 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。其实AJAX就可以理解为就是JS。通过AJAX也就实现了前后端分离&#xff0c;前端只写页面&#xff0c;后端生成数据&#xff01; 现在开始通过实例学习&#xff1a; 1--GET传参 <!…...

golang国内proxy设置

go env -w GOPROXYhttps://goproxy.cn,direct经常使用的两个, goproxy.cn 和 goproxy.io 连接分别是 https://goproxy.cn https://goproxy.io 如果遇到某些包下载不下来的情况&#xff0c;可尝试更换数据源 更推荐使用https://goproxy.cn 速度快&#xff0c;缓存的包多 提醒…...

全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

全网最适合入门的面向对象编程教程&#xff1a;31 Python 的内置数据类型-对象 Object 和类型 Type 摘要&#xff1a; Python 中的对象和类型是一个非常重要的概念。在 Python 中,一切都是对象,包括数字、字符串、列表等,每个对象都有自己的类型。 原文链接&#xff1a; Fre…...

【mongodb】mongodb副本集的搭建和使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…...

Java后端面试复习7.24

lock加锁解锁尝试获取锁方法lock底层基于什么实现lock和lock的底层实现分别面向什么用户lock和synchronized异同如何选择合适的锁ReentrantLock如何实现冲入内部类三个公平和非公平获取锁怎么实现的RL默认公平还是非公平&#xff0c;构造参数ReentrantRedaWriteLock的特性什么是…...

前端 HTML 概述

目录 1. HTML概述 1.1 超文本标记语言 1.2 标签 2. HTML 解析与编辑 2.1 解析与访问 2.2 编辑 html文件 1. HTML概述 HTML&#xff08; Hyper Text Markup Language&#xff1a;超文本标记语言 &#xff09;&#xff1a;主要用于网页主体结构的搭建&#xff0c;在网页上…...

从计算到命令:手把手教你用树莓派i2cset工具给PCA9685的LED0通道写PWM值

从计算到命令&#xff1a;手把手教你用树莓派i2cset工具给PCA9685的LED0通道写PWM值 当你已经理解了PCA9685芯片的寄存器原理&#xff0c;甚至完成了PWM占空比和相位的十六进制计算&#xff0c;却卡在终端操作的最后一步时&#xff0c;这篇文章将成为你的实战手册。我们将以LED…...

模电之直流可调稳压电源设计:Multisim14仿真探索

模电 直流可调稳压电源设计 Multisim14 仿真报告 利用三极管、二极管基本特性&#xff0c;稳压电源知识设计相应模拟电路。 &#xff08;1&#xff09;用集成芯片制作一个0~15V的直流电源&#xff1b; &#xff08;2&#xff09;功率≥12W&#xff1b; &#xff08;3&#xf…...

Windows服务器上的加密狗怎么共享给家里电脑用?保姆级配置USB Redirector和cpolar教程

专业软件加密狗远程共享全攻略&#xff1a;基于USB Redirector与cpolar的实战方案 1. 加密狗远程共享的核心价值与场景痛点 对于依赖专业软件的设计师、工程师和开发人员来说&#xff0c;软件加密狗往往是价值数万元的正版授权核心载体。传统工作模式下&#xff0c;这些物理加…...

SUNFLOWER MATCH LAB在Git版本控制下的协作开发流程

SUNFLOWER MATCH LAB在Git版本控制下的协作开发流程 如果你和团队正在开发一个像SUNFLOWER MATCH LAB这样的AI模型项目&#xff0c;可能已经体会过代码版本混乱、模型权重文件丢失、队友之间修改冲突的烦恼。今天咱们就来聊聊&#xff0c;怎么用Git这个工具&#xff0c;把这些…...

CHORD-X部署排错指南:常见问题如403 Forbidden的解决方法

CHORD-X部署排错指南&#xff1a;常见问题如403 Forbidden的解决方法 部署一个新的AI模型&#xff0c;就像组装一台精密仪器&#xff0c;过程中难免会遇到几个“螺丝”拧不上的情况。特别是当你兴致勃勃地按照教程部署好CHORD-X&#xff0c;准备大展身手时&#xff0c;一个冷冰…...

Cartographer实战:如何用官方数据集快速验证你的安装是否正确

Cartographer实战&#xff1a;官方数据集验证安装全流程指南 当你花了大半天时间终于完成了Cartographer的编译安装&#xff0c;看着终端里密密麻麻的日志滚过最后一行"Build finished successfully"&#xff0c;心里难免会犯嘀咕&#xff1a;这玩意儿真的装对了吗&a…...

AP_DCC_Library:面向模型铁路的跨平台DCC附件解码库

1. 项目概述AP_DCC_Library 是一个专为数字命令控制&#xff08;Digital Command Control, DCC&#xff09;协议设计的嵌入式底层解码库&#xff0c;严格遵循 NMRA S-9.2 系列标准与德国铁路社区&#xff08;RCN&#xff09;规范&#xff08;RCN-211 至 RCN-214&#xff09;。该…...

保姆级教程:用STM32的TIM3测PWM频率和占空比(附完整代码)

STM32实战指南&#xff1a;TIM3精准捕获PWM频率与占空比全解析 在嵌入式开发中&#xff0c;精确测量外部PWM信号的频率和占空比是常见需求。无论是电机控制、传感器数据采集还是通信协议解析&#xff0c;这项技能都至关重要。本文将带您从零开始&#xff0c;使用STM32的TIM3定时…...

Adafruit STSPIN220 Arduino步进电机驱动库详解

1. 项目概述Adafruit STSPIN 库是一个专为 Arduino 平台设计的轻量级驱动库&#xff0c;面向 STMicroelectronics 推出的 STSPIN 系列集成式步进电机驱动芯片&#xff0c;尤其深度适配 Adafruit 官方 STSPIN220 低电压步进电机驱动 breakout 板。该库并非通用型电机控制框架&am…...

嵌入式Bug响应系统:硬件化调试反馈设计

1. 项目概述“当程序员听到Bug后……”并非一个传统意义上的嵌入式硬件功能项目&#xff0c;而是一类以工程师文化为内核、以硬件为表达载体的趣味性技术实践。它不追求性能指标或商用落地&#xff0c;而是通过具象化的电路行为——如LED爆闪、蜂鸣器急促鸣响、LCD显示夸张文案…...