Shell脚本实战三个运维场景案例一、批量创建用户脚本应用场景公司新入职10个员工需要批量创建Linux用户账号并设置初始密码。准备工作创建用户列表文件users.txt每行格式为用户名:密码user01:Pass123 user02:Pass123 user03:Pass123脚本代码#!/bin/bash# 批量创建用户脚本whilereadline;dousername$(echo$line|cut-d:-f1)password$(echo$line|cut-d:-f2)# 创建用户useradd$usernameif[$?-eq0];then# 设置密码echo$password|passwd--stdin$usernameecho用户$username创建成功elseecho用户$username创建失败fidoneusers.txt核心知识点while read循环读取文件cut -d: -f1按冒号分割取第一列$?判断上一条命令执行结果0成功非0失败passwd --stdin从标准输入读取密码 users.txt重定向文件内容到循环二、磁盘监控脚本应用场景监控服务器磁盘使用率超过80%警告超过90%严重警告。脚本代码#!/bin/bash# 磁盘监控脚本# 获取根分区使用率DF$(df-h|grep/$|awk{print $5}|seds/%//g)if[$DF-ge90];thenecho警告磁盘占用率已达${DF}%请立即清理elif[$DF-ge80];thenecho警告磁盘占用率已达${DF}%注意清理elseecho磁盘占用率为${DF}%环境正常fi核心知识点df -h查看磁盘使用情况人类可读格式grep /$筛选根分区以/结尾的行awk {print $5}提取第5列使用率sed s/%//g去掉百分号if-elif-else多条件判断-ge大于等于-gt严格大于注意事项如果要监控所有分区去掉grep /$可以配合 cron 定时任务实现自动监控三、日志清理脚本应用场景自动清理系统中超过7天的旧日志文件释放磁盘空间。脚本代码#!/bin/bash# 日志清理脚本# 统计要删除的文件数量COUNT$(find/var/log-name*.log-mtime7|wc-l)if[$COUNT-gt0];thenecho发现${COUNT}个超过7天的日志文件# 执行删除find/var/log-name*.log-mtime7-deleteecho已清理${COUNT}个日志文件elseecho没有需要清理的日志文件fi核心知识点find 路径 -name *.log查找所有 .log 文件-mtime 7修改时间超过7天| wc -l统计行数文件数量find ... -delete删除找到的文件${变量}引用变量值注意事项删除前先统计数量避免误删测试时先去掉-delete只查看会删除哪些文件操作/var/log需要sudo权限可以修改-mtime 7调整保留天数知识点总结Shell脚本基础脚本开头必须写#!/bin/bash变量赋值不加空格VARvalue使用变量加$符号$VAR或${VAR}条件判断数字比较-eq(等于)-ne(不等于)-gt(大于)-ge(大于等于)-lt(小于)-le(小于等于)字符串比较(相等)!(不等)-z(为空)-n(非空)文件判断-e(存在)-f(普通文件)-d(目录)-r(可读)-w(可写)-x(可执行)常用命令组合awk提取列awk {print $N}sed替换sed s/旧/新/ggrep过滤grep 关键词cut分割cut -d分隔符 -fNwc -l统计行数
阅读完成 · 觉得有帮助?