shell脚本案例

devtools/2024/12/23 21:20:37/

脚本一:打印当前系统登录用户列表

#!/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 将内容写入到文件中,最后输出创建成功信息。


http://www.ppmy.cn/devtools/144797.html

相关文章

【漫话机器学习系列】012.深度学习(Deep Learning)基础

深度学习基础概述 深度学习&#xff08;Deep Learning&#xff09;是一种基于人工神经网络的大规模机器学习方法&#xff0c;在图像识别、语音处理、自然语言理解等领域具有广泛的应用。深度学习模型的构建包括数据准备、损失函数设计、优化算法选择、网络架构搭建、测试数据验…

NGINX的安装和配置(Linux环境)

目录 NGINX 安装方式1、 离线编译安装2、 在线仓库安装 NGINX 常用命令1、进程管理命令2、信息查看命令 NGINX 配置文件1、进程使用的配置2、配置文件格式3、配置文件层级 NGINX 全局配置1、全局配置常用指令2、连接相关配置 NGINX 配置MIME1、MIME 标准2、types 配置块3、defa…

springboot连接mongo性能优化参数配置

在 Spring Boot 中连接 MongoDB 时&#xff0c;性能优化是一个重要的环节。Spring Boot 提供了多种配置选项&#xff0c;可以通过调整这些参数来优化 MongoDB 的连接性能。以下是一些常见的性能优化参数及其配置建议。 1. 连接池配置 MongoDB 连接池的配置是性能优化的核心。通…

浏览器可以直接请求 websocket

一、原生支持 浏览器原生支持 WebSocket 协议&#xff0c;这使得开发者可以直接在 JavaScript 代码中使用 WebSocket 来建立与服务器的双向通信通道。 const socket new WebSocket("ws://localhost:8080");socket.addEventListener("open", function (e…

LeetCode---428双周赛

题目列表 3386. 按下时间最长的按钮 3387. 两天自由外汇交易后的最大货币数 3388. 统计数组中的美丽分割 3389. 使字符频率相等的最少操作次数 一、按下时间最长的按钮 题意要求找到按钮按下时间(即与它前一次按下按钮的时间差)最大的下标&#xff0c;如果存在两个相同的最…

【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符

文章目录 前言一、C语言是什么&#xff1f;二、编译器的选择——VS2022三、main函数四、printf函数五、库函数六、关键字七、字符和ASCII编码八、字符串和\0九、转义字符十、注释总结 前言 上周考完四级(明年再战hh)和两门考试&#xff0c;接下来一个月将迎来其他学科的期末考…

Mac/Linux 快速部署TiDB

1.下载TiUP TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 TiDB 实例、3 个 TiKV 实例、3 个 PD 实例和可选的 TiFlash 实例构成。通过 TiUP Playground&#xff0c;可以快速搭建出上述的一套基础测试集群&#xff0c;步骤如下&#xff1a; curl --proto https -…

C语言:排序

1. 插入排序 (Insertion Sort) 插入排序是一种简单直观的排序算法&#xff0c;它的工作原理类似于整理扑克牌。它的基本思想是将数组分为已排序部分和未排序部分&#xff0c;每次从未排序部分取出一个元素&#xff0c;插入到已排序部分的合适位置。 步骤&#xff1a; 从数组…