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

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 之间的随机整数,通过取模和加法运算将其范围调整到指定的 minmax 之间。

以下是另外 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脚本案例

脚本一&#xff1a;打印当前系统登录用户列表 #!/bin/bash # 使用 who 命令获取当前登录用户信息并输出 who解释&#xff1a;who 命令用于显示当前登录系统的用户信息&#xff0c;包括用户名、登录终端、登录时间等。此脚本直接执行 who 命令并将结果输出到终端。 脚本二&…...

完整微服务设计 功能实现

我们将以一个简单的电商系统为例&#xff0c;实现微服务架构&#xff0c;逐步用Java代码详细实现每个模块&#xff0c;并配合注释帮助小白理解。在这个实现中&#xff0c;我们使用以下工具和框架&#xff1a; Spring Boot&#xff1a;用于构建微服务。Spring Cloud&#xff1a…...

JWT令牌与微服务

1. 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种开放标准(RFC 7519)&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。JWT通常用于身份验证和信息交换。 以下是JWT的一些关键特性&#xff1a; 紧凑&#xff…...

C# WinForm移除非法字符的输入框

C# WinForm移除非法字符的输入框 文章目录 namespace System.Windows.Forms {using System.ComponentModel;/// <summary>/// 支持移除 非法字符 的输入框。/// </summary>public class RemoveInvalidCharTextBox : TextBox{/// <summary>/// 测试代码&#…...

智慧商城:基于请求数据动态渲染购物车列表

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

医疗信息化浪潮下 SSM+Vue 医院预约挂号系统的崛起

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

QScreen在Qt5.15与Qt6.8版本下的区别

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

模具生产过程中的标签使用流程图

①NFC芯片嵌入周转筐&#xff0c;通过读卡器读取CK_Label_v3的数据&#xff0c;并将这些信息上传至服务器进行存储&#xff1b; ②服务器随后与客户的WMS&#xff08;仓库管理系统&#xff09;进行交互&#xff0c;记录和同步注塑机的原始数据&#xff1b; ③当周转筐内的模具…...

Unity-URP设置单独渲染UI相机

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

如何使用java来解析一个pdf文件呢?

最近搞到一个任务是要解析一套雅思题目并提取其中的高频单词。那如何使用java来解析一个pdf文件呢&#xff1f; 首先我们要知道这需要springboot框架来进行创建&#xff0c;需要的PDFTextStripper是一个用于PDF文档中提取文本的类&#xff0c;它是Apache PDFBox的一个类用于处…...

asp.net core发布配置端口号,支持linux

方式一&#xff0c;修改配置文件 appsettings.json 找到文件 appsettings.json&#xff0c; 添加如下节点配置&#xff0c;在linux环境需要设置0.0.0.0才可以正常代表本机&#xff0c;然后被其他机器访问&#xff0c;此处设置端口8000&#xff0c; "Kestrel": {&quo…...

M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务

M3D: 基于多模态大模型的新型3D医学影像分析框架&#xff0c;将3D医学图像分析从“看图片“提升到“理解空间“的层次&#xff0c;支持检索、报告生成、问答、定位和分割等8类任务 论文大纲理解1. 确认目标2. 分析过程&#xff08;目标-手段分析&#xff09;核心问题拆解 3. 实…...

JavaScript中,常用crypto模块进行rsa加密,crypto-js模块进行md5算法

Node.js 的 crypto 模块 Node.js 内置的 crypto 模块提供了基本的加密功能&#xff0c;可以用于生成 RSA 密钥对和执行加密、解密操作。 代码案例&#xff1a; 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的自动开瓶系统

自动瓶盖开启器&#xff1a;结合Arduino和线性运动系统的创新解决方案 展示视频&#xff1a; 基于Arduino的自动开瓶器 引言 在日常生活中&#xff0c;开启瓶盖看似是一件简单的事情&#xff0c;但对于某些人来说&#xff0c;这可能是一个挑战。特别是对于患有类风湿性关节炎…...

通过使用 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 缘起&#xff0c;最近需要识别法国电影《地下铁》的法语字幕&#xff0c;使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…...

搜索召回:召回聚合

召回聚合 用户的查询意图往往是复杂多样的&#xff0c;可能涉及到不同的领域、主题和语义层面。因此&#xff0c;召回体系中通常通过多路召回的方式从不同角度去理解和满足用户的查询需求。此外&#xff0c;多路召回通过各召回通道并行计算可以在海量数据中能够快速响应&#…...

NTFS 文件搜索库

NTFS 文件搜索库 中文 | English 一个快速搜索NTFS卷文件的库 在这里插入图片描述 特性 快速扫描 NTFS 格式驱动器上的所有文件实时快速同步文件变更(创建, 更名, 删除)支持通配符查询文件名或文件路径重启自动更新文件变动, 无需重新进行全盘扫描 API描述 初始化并指定…...

【GoF23种设计模式】02_单例模式(Singleton Pattern)

文章目录 前言一、什么是单例模式&#xff1f;二、为什么要用单例模式&#xff1f;三、如何实现单例模式&#xff1f;总结 前言 提示&#xff1a;设计者模式有利于提高开发者的编程效率和代码质量&#xff1a; GoF&#xff08;Gang of Four&#xff0c;四人帮&#xff09;设计…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...