shell实战学习——具体的shell脚本示例

目录

文件批量重命名

系统资源管理

日志分析统计(以下未完待续 7/17留)

定时任务管理

数据库查询与操作

文件的备份与压缩

自动化部署脚本

简单的用户管理脚本

系统监控与报警

数据分析与报告生成

文件批量重命名

题目:编写一个Shell脚本,实现将当前目录下所有以 .jpg 结尾的文件批量重命名,要求在每个文件名前加上指定的前缀,并输出重命名成功的文件数。

提示:

  1. 使用循环遍历当前目录下的所有 .jpg 文件。
  2. 对每个文件生成新的文件名,形如 prefix_filename.jpg
  3. 使用 mv 命令进行文件重命名操作。
  4. 最后输出成功重命名的文件数。
# 示例答案一(不输出文件数)
#!/bin/bash

# 获取当前目录下所有以 .jpg 结尾的文件
for file in *.jpg; do        # for in ;do done循环,分号或换行啊;注意规范缩进,多注释
    # 生成新的文件名
    newname="prefix_$file"       # 一定要记住$使用变量
    # 重命名文件
    mv "$file" "$newname"        
    # 是mv可不是rm,想想两者分别啥意思,回忆一下选项
    # mv是移动文件文件夹,但是如果目标文件不在的话,则“改名”效果
done

echo "Files renamed successfully."
# 示例答案二(输出文件数)
#!/bin/bash

count=0

# 获取当前目录下所有以 .jpg 结尾的文件
for file in *.jpg; do
    # 生成新的文件名
    newname="prefix_$file"
    # 重命名文件
    mv "$file" "$newname"
    # $?是一个特殊变量,存储了上一个命令的退出状态码。
    # 退出状态码为0表示命令成功执行,如果不为0则表示命令执行失败。
    if [[ $? -eq 0 ]]; then
        echo "Renamed $file to $newname"
        ((count++))
    else
        echo "Failed to rename $file"
    fi
    # 以上六行也可以写为
    # mv "$file" "$newname"&&((count++))

done

echo "Files renamed successfully. Total files renamed: $count"

系统资源管理

题目:编写一个Shell脚本,监控并输出当前系统的CPU和内存使用情况

具体要求如下:

  1. 使用 top 命令获取当前系统的CPU使用情况,并输出为百分比。
  2. 使用 free 命令获取当前系统的内存使用情况,并输出为百分比。
  3. 最后输出CPU和内存使用情况的百分比值。

提示:

  • 可以使用 grepawk 命令来提取和计算所需的数据。
  • 使用 printf 格式化输出结果。
#!/bin/bash

# 获取当前系统的CPU和内存使用情况
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2 * 100}')

echo "CPU Usage: $cpu_usage%"
echo "Memory Usage: $mem_usage%"

top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}

top -bn1top命令实时显示系统信息(进程CPU内存...)-b批处理 n1运行一次退出
grep "Cpu(s)"

top 命令的输出中提取包含CPU使用情况的行。

grep搜索文本  Cpu(s)搜索模式

sed "s/.*, *\([0-9.]*\)%* id.*/\1/"

提取出CPU空闲百分比。

awk '{print 100 - $1}

计算并打印CPU使用百分比。

计算100减去sed中打印的值$1(表示第一列),并打印结果

 free | awk '/Mem/{printf("%.2f"), $3/$2 * 100}'

free

free命令显示系统内存的使用情况,包括总内存、已用内存、空闲内存等。

awk '/Mem/{...}'对包含 Mem 的行进行处理。
{printf("%.2f"), $3/$2 * 100}

计算已用内存占总内存的百分比,并格式化为保留两位小数。

$3:表示第三列(即已用内存)。

$2:表示第二列(即总内存)。

问题:

  1. 该脚本是如何计算CPU使用情况的?
  2. sedawk 命令在脚本中分别起到了什么作用?
  3. 该脚本是如何计算内存使用情况的?
  4. 请解释 free 命令输出的内存信息是如何被处理并计算成百分比的。

答案:

  1. 该脚本通过 top 命令获取CPU空闲百分比,然后用100减去该值来计算CPU使用百分比。
  2. sed 命令用于从 top 命令的输出中提取出CPU空闲百分比,awk 命令则用于计算使用百分比(100 - 空闲百分比)。
  3. 该脚本通过 free 命令获取总内存和已用内存,然后计算内存使用百分比(已用内存 / 总内存 * 100)。
  4. free 命令输出内存信息,awk 命令从中提取出总内存和已用内存,并计算成百分比输出。

日志分析统计(以下未完待续 7/17留)

#!/bin/bash

# 统计日志中不同IP的访问次数
logfile="access.log"

echo "IP Address   Requests"
echo "====================="
awk '{print $1}' "$logfile" | sort | uniq -c | sort -nr | while read count ip; do
    printf "%-15s %7d\n" "$ip" $count
done

定时任务管理

#!/bin/bash

# 每天定时备份数据库
backup_dir="/path/to/backup"
backup_file="$backup_dir/db_backup_$(date +%Y%m%d).sql"

# 使用 pg_dump 备份数据库
pg_dump -h localhost -U username dbname > "$backup_file"

if [[ $? -eq 0 ]]; then
    echo "Database backup successfully created: $backup_file"
else
    echo "Error creating database backup."
fi

数据库查询与操作

#!/bin/bash

# 查询并显示数据库中的活跃用户
query="SELECT * FROM users WHERE status='active';"
psql -h localhost -U username dbname -c "$query"

# 向数据库插入新用户
new_user="INSERT INTO users (name, email, status) VALUES ('John Doe', 'john.doe@example.com', 'active');"
psql -h localhost -U username dbname -c "$new_user"

文件的备份与压缩

#!/bin/bash

# 备份指定目录下的文件,并压缩为tar.gz格式
backup_dir="/path/to/data"
backup_file="backup_$(date +%Y%m%d).tar.gz"

tar -czf "$backup_file" "$backup_dir"

if [[ $? -eq 0 ]]; then
    echo "Backup successfully created: $backup_file"
else
    echo "Error creating backup."
fi

自动化部署脚本

#!/bin/bash

# 自动化部署Web应用程序到远程服务器
remote_host="username@hostname"
remote_dir="/path/to/deploy"
local_war="app.war"

echo "Deploying application to $remote_host:$remote_dir ..."
scp "$local_war" "$remote_host:$remote_dir"

# 在远程服务器上解压并重启应用服务器
ssh "$remote_host" "cd $remote_dir && tar -xf $local_war && systemctl restart tomcat"

if [[ $? -eq 0 ]]; then
    echo "Deployment successful."
else
    echo "Deployment failed."
fi

简单的用户管理脚本

#!/bin/bash

# 简单的用户管理脚本,添加和删除用户
echo "Choose an action:"
echo "1. Add User"
echo "2. Delete User"
read choice

case $choice in
    1)
        echo "Enter username to add:"
        read username
        useradd "$username"
        if [[ $? -eq 0 ]]; then
            echo "User $username added successfully."
        else
            echo "Failed to add user."
        fi
        ;;
    2)
        echo "Enter username to delete:"
        read username
        userdel "$username"
        if [[ $? -eq 0 ]]; then
            echo "User $username deleted successfully."
        else
            echo "Failed to delete user."
        fi
        ;;
    *)
        echo "Invalid choice."
        ;;
esac

系统监控与报警

#!/bin/bash

# 监控系统资源使用情况,并发送邮件报警
threshold=90
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')

if [[ $(echo "$cpu_usage > $threshold" | bc -l) -eq 1 ]]; then
    echo "High CPU usage detected: $cpu_usage%"
    mail -s "High CPU Usage Alert" admin@example.com <<< "Current CPU Usage: $cpu_usage%"
else
    echo "CPU usage within normal range: $cpu_usage%"
fi

数据分析与报告生成

#!/bin/bash

# 统计日志中访问量最高的页面
logfile="access.log"

echo "Top 10 Pages by Access Count:"
echo "============================="
awk '{print $7}' "$logfile" | sort | uniq -c | sort -nr | head -n 10 | while read count page; do
    printf "%-10s %s\n" "$count" "$page"
done

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值