shell脚本案例
脚本一:打印当前系统登录用户列表
#!/bin/bash
# 使用 who 命令获取当前登录用户信息并输出
who
解释:who
命令用于显示当前登录系统的用户信息,包括用户名、登录终端、登录时间等。此脚本直接执行 who
命令并将结果输出到终端。
脚本二:统计指定目录下的文件数量
#!/bin/bash
# 输入要统计的目录路径
read -p "请输入要统计文件数量的目录路径:" dir_path
# 使用 ls 命令列出目录下的文件,通过管道传递给 wc -l 命令统计行数,即文件数量
file_num=$(ls -l $dir_path | wc -l)
echo "目录 $dir_path 下的文件数量为:$file_num"
解释:首先提示用户输入目录路径,然后使用 ls -l
命令以长格式列出指定目录下的内容,再将输出通过管道传给 wc -l
命令,wc -l
会统计输入内容的行数,这里的行数就等于文件数量(包含隐藏文件),最后将结果输出。
脚本三:创建一个包含当前日期的日志文件并写入内容
#!/bin/bash
# 获取当前日期
current_date=$(date +%Y%m%d)
# 定义日志文件名
log_file="$current_date.log"
# 使用 echo 命令向日志文件写入内容
echo "这是一个日志文件示例,创建于 $current_date" > $log_file
echo "日志文件已创建:$log_file"
解释:先通过 date +%Y%m%d
获取当前日期并赋值给变量 current_date
,然后根据日期定义日志文件名。接着使用 echo
命令将包含日期信息的文本写入到日志文件中,最后输出日志文件创建成功的信息。
脚本四:备份指定文件到指定备份目录
#!/bin/bash
# 输入要备份的文件路径
read -p "请输入要备份的文件路径:" file_path
# 输入备份目录路径
read -p "请输入备份目录路径:" backup_dir
# 使用 cp 命令复制文件到备份目录
cp $file_path $backup_dir
echo "文件 $file_path 已备份到 $backup_dir"
解释:脚本先后提示用户输入要备份的文件路径和备份目录路径,然后使用 cp
命令将源文件复制到备份目录,最后输出备份成功的提示信息。
脚本五:查找系统中占用内存最多的前 5 个进程
#!/bin/bash
# 使用 ps 命令获取进程信息,按内存使用量排序,取前 5 个进程并输出
ps aux --sort=-%MEM | head -n 6
解释:ps aux
命令用于显示系统中所有进程的详细信息,--sort=-%MEM
表示按照内存使用量(%MEM
)降序排列,head -n 6
则取前 6 行(第一行是表头,后 5 行是占用内存最多的前 5 个进程信息)输出。
脚本六:批量重命名文件,将文件名中的特定字符串替换
#!/bin/bash
# 输入要处理的目录路径
read -p "请输入要处理文件的目录路径:" dir_path
# 输入要替换的旧字符串
read -p "请输入要替换的旧字符串:" old_str
# 输入要替换成的新字符串
read -p "请输入要替换成的新字符串:" new_str
# 遍历目录下的文件,使用 mv 命令重命名
for file in $dir_path/*; doif [ -f "$file" ]; thennew_file=$(echo $file | sed "s/$old_str/$new_str/g")mv $file $new_filefi
done
echo "文件重命名完成"
解释:先让用户输入目录路径、旧字符串和新字符串。然后遍历指定目录下的文件,对于每个文件,使用 sed
命令将文件名中的旧字符串替换成新字符串,得到新文件名,最后使用 mv
命令将原文件重命名为新文件名,全部处理完后输出完成信息。
脚本七:计算 1 到 100 的偶数之和
#!/bin/bash
# 初始化总和为 0
sum=0
# 循环遍历 1 到 100 的偶数并累加
for ((i = 2; i <= 100; i += 2)); dosum=$((sum + i))
done
echo "1 到 100 的偶数之和为:$sum"
解释:首先将变量 sum
初始化为 0,然后使用 for
循环从 2 开始,每次增加 2,直到 100,在循环中把每个偶数累加到 sum
变量中,最后输出偶数之和。
脚本八:检查网络连接是否正常
#!/bin/bash
# 使用 ping 命令测试网络连接,向百度服务器发送 4 个数据包
ping -c 4 www.baidu.com
# 根据返回值判断网络连接状态
if [ $? -eq 0 ]; thenecho "网络连接正常"
elseecho "网络连接异常"
fi
解释:使用 ping
命令向百度服务器发送 4 个数据包来测试网络连接情况。$?
是上一个命令的返回值,ping
命令正常返回时返回值为 0,如果返回值等于 0,则表示网络连接正常,否则表示网络连接异常,并输出相应信息。
脚本九:将文本文件中的每一行内容反转
#!/bin/bash
# 输入要处理的文本文件路径
read -p "请输入要处理的文本文件路径:" file_path
# 使用 tac 命令反转文件内容并输出
tac $file_path
解释:先获取用户输入的文本文件路径,然后使用 tac
命令对文件内容进行反转处理并输出。tac
命令的作用与 cat
相反,它会将文件内容从后向前输出,从而实现每行内容的反转。
脚本十:生成一个包含 10 个随机数的文件
#!/bin/bash
# 定义随机数范围
min=1
max=100
# 循环生成 10 个随机数并写入文件
for ((i = 1; i <= 10; i++)); dorandom_num=$((RANDOM % (max - min + 1) + min))echo $random_num >> random_numbers.txt
done
echo "随机数文件已生成:random_numbers.txt"
解释:首先定义随机数的范围,然后通过 for
循环 10 次,在每次循环中使用 RANDOM
环境变量生成一个在指定范围内的随机数,并将其追加写入到 random_numbers.txt
文件中,最后输出文件生成成功的信息。RANDOM
会生成一个 0 到 32767 之间的随机整数,通过取模和加法运算将其范围调整到指定的 min
到 max
之间。
以下是另外 10 个 shell 脚本:
脚本十一:删除指定目录下超过 7 天的临时文件
#!/bin/bash
# 输入要处理的目录路径
read -p "请输入临时文件所在目录路径:" dir_path
# 查找并删除超过 7 天的文件(以修改时间为准)
find $dir_path -type f -mtime +7 -delete
echo "已删除 $dir_path 目录下超过 7 天的临时文件"
解释:先让用户输入目录路径,然后使用 find
命令在该目录下查找类型为文件且修改时间超过 7 天的文件,并直接删除它们,最后输出删除完成的提示。
脚本十二:比较两个文件内容是否相同
#!/bin/bash
# 输入要比较的第一个文件路径
read -p "请输入第一个文件路径:" file1
# 输入要比较的第二个文件路径
read -p "请输入第二个文件路径:" file2
# 使用 diff 命令比较文件,根据返回值判断
if diff $file1 $file2 > /dev/null; thenecho "两个文件内容相同"
elseecho "两个文件内容不同"
fi
解释:获取两个文件路径后,使用 diff
命令比较它们。如果 diff
命令的输出重定向到 /dev/null
(空设备,即丢弃输出)后返回值为 0,说明文件内容相同,否则不同,并输出相应结果。
脚本十三:提取文件中的所有数字并求和
#!/bin/bash
# 输入要处理的文件路径
read -p "请输入文件路径:" file_path
# 使用 grep 提取数字,再用 awk 求和
sum=$(grep -oE '[0-9]+' $file_path | awk '{sum += $1} END {print sum}')
echo "文件中的数字总和为:$sum"
解释:先读取文件路径,然后用 grep -oE '[0-9]+'
提取文件中的所有数字,再通过管道将这些数字传给 awk
,在 awk
中累加这些数字并在结束时输出总和。
脚本十四:创建一个包含指定目录结构的备份目录
#!/bin/bash
# 输入要备份的源目录路径
read -p "请输入源目录路径:" source_dir
# 输入备份目录路径
read -p "请输入备份目录路径:" backup_dir
# 使用 mkdir -p 创建备份目录结构
mkdir -p $backup_dir/$(basename $source_dir)
echo "备份目录结构已创建:$backup_dir/$(basename $source_dir)"
解释:先获取源目录和备份目录路径,然后使用 mkdir -p
命令递归创建备份目录结构,其中 $(basename $source_dir)
用于获取源目录的基本名称(即最后一级目录名),最后输出创建成功信息。
脚本十五:监控指定进程的 CPU 使用率,每 5 秒输出一次
#!/bin/bash
# 输入要监控的进程名
read -p "请输入要监控的进程名:" process_name
# 循环监控,每 5 秒输出一次
while true; docpu_usage=$(ps -eo pcpu,comm | grep $process_name | awk '{print $1}')echo "$process_name 的 CPU 使用率:$cpu_usage%"sleep 5
done
解释:先让用户输入进程名,然后进入一个无限循环。在循环中,使用 ps -eo pcpu,comm
命令获取进程的 CPU 使用率信息,通过 grep
筛选出指定进程的信息,再用 awk
提取 CPU 使用率数值,最后输出并休眠 5 秒后再次循环。
脚本十六:将多个文本文件合并成一个新文件
#!/bin/bash
# 输入要合并的文件所在目录路径
read -p "请输入文件所在目录路径:" dir_path
# 定义合并后的文件名
merged_file="merged.txt"
# 使用 cat 命令合并文件
cat $dir_path/*.txt > $merged_file
echo "已将 $dir_path 下的文本文件合并到 $merged_file"
解释:先获取文件目录路径,定义合并后的文件名,然后使用 cat
命令将目录下所有 .txt
文件的内容合并到新文件中,最后输出合并完成信息。
脚本十七:统计指定目录下不同类型文件的数量
#!/bin/bash
# 输入要统计的目录路径
read -p "请输入目录路径:" dir_path
# 使用 find 和 awk 统计文件类型数量
find $dir_path -type f | awk -F '.' '{print $NF}' | sort | uniq -c | awk '{print $2 " 类型文件数量为:" $1}'
解释:先读取目录路径,然后使用 find
命令找出该目录下所有文件,通过管道将文件名传给 awk
,以 .
为分隔符提取文件扩展名,再经过排序、去重并统计数量,最后输出每种文件类型及其数量。
脚本十八:将文件中的大写字母转换为小写字母
#!/bin/bash
# 输入要处理的文件路径
read -p "请输入文件路径:" file_path
# 使用 tr 命令转换字母大小写
tr 'A-Z' 'a-z' < $file_path > new_$file_path
echo "已将文件 $file_path 中的大写字母转换为小写字母,新文件为 new_$file_path"
解释:先获取文件路径,然后使用 tr
命令将文件中的大写字母转换为小写字母,并将结果输出到一个新文件(文件名前加 new_
),最后输出转换完成信息。
脚本十九:查找指定目录下最大的文件
#!/bin/bash
# 输入要查找的目录路径
read -p "请输入目录路径:" dir_path
# 使用 find 和 sort 查找最大文件
find $dir_path -type f -exec du -h {} \; | sort -rh | head -n 1
解释:先让用户输入目录路径,然后使用 find
命令在该目录下查找所有文件,并使用 du -h
命令获取文件大小,通过管道将结果传给 sort -rh
按文件大小降序排列,最后用 head -n 1
取最大的文件信息并输出。
脚本二十:创建一个简单的 HTML 页面并写入内容
#!/bin/bash
# 定义 HTML 页面文件名
html_file="index.html"
# 定义页面内容
page_content="<html><body><h1>这是一个由 Shell 脚本创建的 HTML 页面</h1></body></html>"
# 使用 echo 写入内容到 HTML 文件
echo $page_content > $html_file
echo "HTML 页面已创建:$html_file"
解释:先定义 HTML 页面文件名和内容,然后使用 echo
将内容写入到文件中,最后输出创建成功信息。
相关文章:
shell脚本案例
脚本一:打印当前系统登录用户列表 #!/bin/bash # 使用 who 命令获取当前登录用户信息并输出 who解释:who 命令用于显示当前登录系统的用户信息,包括用户名、登录终端、登录时间等。此脚本直接执行 who 命令并将结果输出到终端。 脚本二&…...
完整微服务设计 功能实现
我们将以一个简单的电商系统为例,实现微服务架构,逐步用Java代码详细实现每个模块,并配合注释帮助小白理解。在这个实现中,我们使用以下工具和框架: Spring Boot:用于构建微服务。Spring Cloud:…...

JWT令牌与微服务
1. 什么是JWT JWT(JSON Web Token)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于作为JSON对象在各方之间安全地传输信息。JWT通常用于身份验证和信息交换。 以下是JWT的一些关键特性: 紧凑ÿ…...
C# WinForm移除非法字符的输入框
C# WinForm移除非法字符的输入框 文章目录 namespace System.Windows.Forms {using System.ComponentModel;/// <summary>/// 支持移除 非法字符 的输入框。/// </summary>public class RemoveInvalidCharTextBox : TextBox{/// <summary>/// 测试代码&#…...

智慧商城:基于请求数据动态渲染购物车列表
进入购物车列表页面,当即触发请求,打印出解构出来的data.list 查看数据是否添加到 vuex 中。 将物品加入购物车,点击购物车进入购物车列表页,点击 vue 调试工具,可以看到 cart 模块state中新增添加的几个物品信息 渲染…...

医疗信息化浪潮下 SSM+Vue 医院预约挂号系统的崛起
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...

QScreen在Qt5.15与Qt6.8版本下的区别
简述 QScreen主要用于提供与屏幕相关的信息。它可以获取有关显示设备的分辨率、尺寸、DPI(每英寸点数)等信息。本文主要是介绍Qt5.15与Qt6环境下,QScreen的差异,以及如何判断高DPI设备。 属性说明 logicalDotsPerInch࿱…...

模具生产过程中的标签使用流程图
①NFC芯片嵌入周转筐,通过读卡器读取CK_Label_v3的数据,并将这些信息上传至服务器进行存储; ②服务器随后与客户的WMS(仓库管理系统)进行交互,记录和同步注塑机的原始数据; ③当周转筐内的模具…...

Unity-URP设置单独渲染UI相机
Unity-URP设置单独渲染UI相机 1、设置主相机层级,剔除UI层 2、新建UICamera,设置RenderType为Overiay;显示层级只选择UI层 3、选择主相机,Stack参数添加UICamera 4、Canvas设置成ScreenSpace-Camera,并指定UICamera渲…...

如何使用java来解析一个pdf文件呢?
最近搞到一个任务是要解析一套雅思题目并提取其中的高频单词。那如何使用java来解析一个pdf文件呢? 首先我们要知道这需要springboot框架来进行创建,需要的PDFTextStripper是一个用于PDF文档中提取文本的类,它是Apache PDFBox的一个类用于处…...
asp.net core发布配置端口号,支持linux
方式一,修改配置文件 appsettings.json 找到文件 appsettings.json, 添加如下节点配置,在linux环境需要设置0.0.0.0才可以正常代表本机,然后被其他机器访问,此处设置端口8000, "Kestrel": {&quo…...

M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务
M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务 论文大纲理解1. 确认目标2. 分析过程(目标-手段分析)核心问题拆解 3. 实…...
JavaScript中,常用crypto模块进行rsa加密,crypto-js模块进行md5算法
Node.js 的 crypto 模块 Node.js 内置的 crypto 模块提供了基本的加密功能,可以用于生成 RSA 密钥对和执行加密、解密操作。 代码案例: const crypto require(crypto);const { publicKey, privateKey } crypto.generateKeyPairSync(rsa, {modulusLen…...

机器学习04-为什么Relu函数
机器学习0-为什么Relu函数 文章目录 机器学习0-为什么Relu函数 [toc]1-手搓神经网络步骤总结2-为什么要用Relu函数3-进行L1正则化修改后的代码解释 4-进行L2正则化解释注意事项 5-Relu激活函数多有夸张1-细数Relu函数的5宗罪2-Relu函数5宗罪详述 6-那为什么要用这个Relu函数7-文…...

基于Arduino的自动开瓶系统
自动瓶盖开启器:结合Arduino和线性运动系统的创新解决方案 展示视频: 基于Arduino的自动开瓶器 引言 在日常生活中,开启瓶盖看似是一件简单的事情,但对于某些人来说,这可能是一个挑战。特别是对于患有类风湿性关节炎…...
通过使用 contenteditable=“true“,我们彻底防止了 iOS 系统键盘的弹出
明白了,对于苹果手机(iOS),即使使用了 bindtap 和 e.preventDefault() 来阻止默认行为,系统键盘仍然可能会弹出。这是因为 iOS 对输入框的处理方式与 Android 不同,尤其是在处理 input 元素时,iOS 会更加积极地弹出键盘。 解决方案 为了彻底防止 iOS 系统键盘弹出,我…...

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕
20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 2024/12/17 17:21 缘起,最近需要识别法国电影《地下铁》的法语字幕,使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…...
搜索召回:召回聚合
召回聚合 用户的查询意图往往是复杂多样的,可能涉及到不同的领域、主题和语义层面。因此,召回体系中通常通过多路召回的方式从不同角度去理解和满足用户的查询需求。此外,多路召回通过各召回通道并行计算可以在海量数据中能够快速响应&#…...

NTFS 文件搜索库
NTFS 文件搜索库 中文 | English 一个快速搜索NTFS卷文件的库 在这里插入图片描述 特性 快速扫描 NTFS 格式驱动器上的所有文件实时快速同步文件变更(创建, 更名, 删除)支持通配符查询文件名或文件路径重启自动更新文件变动, 无需重新进行全盘扫描 API描述 初始化并指定…...
【GoF23种设计模式】02_单例模式(Singleton Pattern)
文章目录 前言一、什么是单例模式?二、为什么要用单例模式?三、如何实现单例模式?总结 前言 提示:设计者模式有利于提高开发者的编程效率和代码质量: GoF(Gang of Four,四人帮)设计…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...