shell脚本案例

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

bash 复制代码
#!/bin/bash
# 使用 who 命令获取当前登录用户信息并输出
who

解释:who 命令用于显示当前登录系统的用户信息,包括用户名、登录终端、登录时间等。此脚本直接执行 who 命令并将结果输出到终端。

脚本二:统计指定目录下的文件数量

bash 复制代码
#!/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 会统计输入内容的行数,这里的行数就等于文件数量(包含隐藏文件),最后将结果输出。

脚本三:创建一个包含当前日期的日志文件并写入内容

bash 复制代码
#!/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 命令将包含日期信息的文本写入到日志文件中,最后输出日志文件创建成功的信息。

脚本四:备份指定文件到指定备份目录

bash 复制代码
#!/bin/bash
# 输入要备份的文件路径
read -p "请输入要备份的文件路径:" file_path
# 输入备份目录路径
read -p "请输入备份目录路径:" backup_dir
# 使用 cp 命令复制文件到备份目录
cp $file_path $backup_dir
echo "文件 $file_path 已备份到 $backup_dir"

解释:脚本先后提示用户输入要备份的文件路径和备份目录路径,然后使用 cp 命令将源文件复制到备份目录,最后输出备份成功的提示信息。

脚本五:查找系统中占用内存最多的前 5 个进程

bash 复制代码
#!/bin/bash
# 使用 ps 命令获取进程信息,按内存使用量排序,取前 5 个进程并输出
ps aux --sort=-%MEM | head -n 6

解释:ps aux 命令用于显示系统中所有进程的详细信息,--sort=-%MEM 表示按照内存使用量(%MEM)降序排列,head -n 6 则取前 6 行(第一行是表头,后 5 行是占用内存最多的前 5 个进程信息)输出。

脚本六:批量重命名文件,将文件名中的特定字符串替换

bash 复制代码
#!/bin/bash
# 输入要处理的目录路径
read -p "请输入要处理文件的目录路径:" dir_path
# 输入要替换的旧字符串
read -p "请输入要替换的旧字符串:" old_str
# 输入要替换成的新字符串
read -p "请输入要替换成的新字符串:" new_str
# 遍历目录下的文件,使用 mv 命令重命名
for file in $dir_path/*; do
    if [ -f "$file" ]; then
        new_file=$(echo $file | sed "s/$old_str/$new_str/g")
        mv $file $new_file
    fi
done
echo "文件重命名完成"

解释:先让用户输入目录路径、旧字符串和新字符串。然后遍历指定目录下的文件,对于每个文件,使用 sed 命令将文件名中的旧字符串替换成新字符串,得到新文件名,最后使用 mv 命令将原文件重命名为新文件名,全部处理完后输出完成信息。

脚本七:计算 1 到 100 的偶数之和

bash 复制代码
#!/bin/bash
# 初始化总和为 0
sum=0
# 循环遍历 1 到 100 的偶数并累加
for ((i = 2; i <= 100; i += 2)); do
    sum=$((sum + i))
done
echo "1 到 100 的偶数之和为:$sum"

解释:首先将变量 sum 初始化为 0,然后使用 for 循环从 2 开始,每次增加 2,直到 100,在循环中把每个偶数累加到 sum 变量中,最后输出偶数之和。

脚本八:检查网络连接是否正常

bash 复制代码
#!/bin/bash
# 使用 ping 命令测试网络连接,向百度服务器发送 4 个数据包
ping -c 4 www.baidu.com
# 根据返回值判断网络连接状态
if [ $? -eq 0 ]; then
    echo "网络连接正常"
else
    echo "网络连接异常"
fi

解释:使用 ping 命令向百度服务器发送 4 个数据包来测试网络连接情况。$? 是上一个命令的返回值,ping 命令正常返回时返回值为 0,如果返回值等于 0,则表示网络连接正常,否则表示网络连接异常,并输出相应信息。

脚本九:将文本文件中的每一行内容反转

bash 复制代码
#!/bin/bash
# 输入要处理的文本文件路径
read -p "请输入要处理的文本文件路径:" file_path
# 使用 tac 命令反转文件内容并输出
tac $file_path

解释:先获取用户输入的文本文件路径,然后使用 tac 命令对文件内容进行反转处理并输出。tac 命令的作用与 cat 相反,它会将文件内容从后向前输出,从而实现每行内容的反转。

脚本十:生成一个包含 10 个随机数的文件

bash 复制代码
#!/bin/bash
# 定义随机数范围
min=1
max=100
# 循环生成 10 个随机数并写入文件
for ((i = 1; i <= 10; i++)); do
    random_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 天的临时文件

bash 复制代码
#!/bin/bash
# 输入要处理的目录路径
read -p "请输入临时文件所在目录路径:" dir_path
# 查找并删除超过 7 天的文件(以修改时间为准)
find $dir_path -type f -mtime +7 -delete
echo "已删除 $dir_path 目录下超过 7 天的临时文件"

解释:先让用户输入目录路径,然后使用 find 命令在该目录下查找类型为文件且修改时间超过 7 天的文件,并直接删除它们,最后输出删除完成的提示。

脚本十二:比较两个文件内容是否相同

bash 复制代码
#!/bin/bash
# 输入要比较的第一个文件路径
read -p "请输入第一个文件路径:" file1
# 输入要比较的第二个文件路径
read -p "请输入第二个文件路径:" file2
# 使用 diff 命令比较文件,根据返回值判断
if diff $file1 $file2 > /dev/null; then
    echo "两个文件内容相同"
else
    echo "两个文件内容不同"
fi

解释:获取两个文件路径后,使用 diff 命令比较它们。如果 diff 命令的输出重定向到 /dev/null(空设备,即丢弃输出)后返回值为 0,说明文件内容相同,否则不同,并输出相应结果。

脚本十三:提取文件中的所有数字并求和

bash 复制代码
#!/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 中累加这些数字并在结束时输出总和。

脚本十四:创建一个包含指定目录结构的备份目录

bash 复制代码
#!/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 秒输出一次

bash 复制代码
#!/bin/bash
# 输入要监控的进程名
read -p "请输入要监控的进程名:" process_name
# 循环监控,每 5 秒输出一次
while true; do
    cpu_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 秒后再次循环。

脚本十六:将多个文本文件合并成一个新文件

bash 复制代码
#!/bin/bash
# 输入要合并的文件所在目录路径
read -p "请输入文件所在目录路径:" dir_path
# 定义合并后的文件名
merged_file="merged.txt"
# 使用 cat 命令合并文件
cat $dir_path/*.txt > $merged_file
echo "已将 $dir_path 下的文本文件合并到 $merged_file"

解释:先获取文件目录路径,定义合并后的文件名,然后使用 cat 命令将目录下所有 .txt 文件的内容合并到新文件中,最后输出合并完成信息。

脚本十七:统计指定目录下不同类型文件的数量

bash 复制代码
#!/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,以 . 为分隔符提取文件扩展名,再经过排序、去重并统计数量,最后输出每种文件类型及其数量。

脚本十八:将文件中的大写字母转换为小写字母

bash 复制代码
#!/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_),最后输出转换完成信息。

脚本十九:查找指定目录下最大的文件

bash 复制代码
#!/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 页面并写入内容

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

相关推荐
吴声子夜歌1 天前
Shell编程实例——bash的配置与自定义(二)
linux·运维·shell
吴声子夜歌2 天前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
吴声子夜歌2 天前
Shell编程实例——脚本编程的附加特性
linux·运维·shell
云计算练习生2 天前
什么是内核?操作系统内核到底管哪些事
linux·windows·操作系统·内核·shell
吴声子夜歌5 天前
Shell编程实例——bash入门
linux·运维·shell
Swizard5 天前
Linux 日志神器 journalctl 完全指南:彻底替代传统日志查看方式
shell
吴声子夜歌6 天前
Shell编程——数组
linux·运维·shell
吴声子夜歌6 天前
Shell编程——开发规范
linux·运维·shell
吴声子夜歌6 天前
Shell编程——if条件语句
linux·运维·shell
吴声子夜歌7 天前
Shell编程——条件测试与比较
linux·运维·shell