shell脚本 --案例实操
1、系统信息收集版本
编写一个脚本名为 collect_system_info.sh
,实现以下功能:
-
收集系统的基本信息,包括但不限于操作系统版本、内核版本、主机名,并将这些信息输出到一个名为
system_info.txt
的文件中,每个信息占一行,并加上清晰的说明标签。 -
统计当前系统中正在运行的进程数量,并将结果追加到
system_info.txt
文件中,格式为“正在运行的进程数量:[具体数量]”。 -
使用合适的命令查找系统中占用 CPU 资源最多的前 5 个进程(如果系统有相关命令支持的话),并将它们的进程 ID 和进程名称输出到
system_info.txt
文件中,格式为“占用 CPU 多的进程:进程 ID - 进程名称”,每个进程占一行。如果系统无法直接找出前 5 个,可根据实际情况尽可能多地找出占用高的进程展示。
vim collect_system_info.sh
#!/bin/bash
aaa_file="collect_system_info"
> "$aaa_file"#清空或创建文件
#收集系统基本信息
echo "系统基本信息" >> "$aaa_file"
echo "操作系统版本: $(grep -i 'pretty_name' /etc/os-release | cut -d'"' -f2)" >> "$aaa_file"
echo "系统内核: $(uname -r)" >> "$aaa_file"
echo "主机名: $(hostname)" >> "$aaa_file"
#统计正在运行的进程数量
echo "正在运行的进程数量:$(ps -e | wc -l)" >> "$aaa_file"
#查找占用内存最高的进程数
echo "前五占用cpu最高的进程:$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6)" >> "$aaa_file"
#保存
echo "系统信息已保存在 $aaa_file"
2、用户管理配置脚本
创建一个脚本名为 user_config.sh
,完成以下任务:
-
接受一个用户名为参数,如果该用户不存在,则创建这个用户,并设置一个随机生成的 8 位包含大小写字母和数字的密码(可借助相关命令或工具实现随机密码生成)。将用户信息(用户名和密码)追加到一个名为
users.txt
的文件中,格式为“用户名:密码”。 -
为新创建的用户添加一个备注信息,备注信息内容为“新创建用户于[当前日期]”,使用
chfn
命令实现(如果系统支持)。如果系统没有chfn
命令,可将备注信息以一种合适的方式记录下来,比如在users.txt
文件中用户名对应行的末尾添加备注。 -
将该用户添加到一个名为
common_group
的用户组中(如果该用户组不存在,则先创建它)。
#!/bin/bash# 检查是否提供了用户名参数
if [ $# -eq 0 ]; thenecho "错误:请提供用户名作为参数"echo "用法:$0 <用户名>"exit 1
fiusername=$1
current_date=$(date +"%Y-%m-%d")
password_file="users.txt"
common_group="common_group"# 生成随机密码(8位,包含大小写字母和数字)
generate_password() {tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 8
}# 检查用户是否存在
if id "$username" &>/dev/null; thenecho "用户 $username 已存在"
else# 生成随机密码password=$(generate_password)# 创建用户useradd -m "$username"echo "$username:$password" | chpasswd# 将用户信息添加到文件echo "$username:$password" >> "$password_file"echo "用户 $username 已创建,密码已设置"# 添加备注信息if command -v chfn &>/dev/null; thenchfn -f "新创建用户于$current_date" "$username"# 更新文件中的备注信息sed -i "s/^$username:.*/&:新创建用户于$current_date/" "$password_file"else# 如果没有chfn命令,直接在文件中添加备注sed -i "s/^$username:.*/&:新创建用户于$current_date/" "$password_file"fi
fi# 处理用户组
if ! getent group "$common_group" &>/dev/null; thengroupadd "$common_group"echo "用户组 $common_group 已创建"
fi# 将用户添加到common_group
if ! id -nG "$username" | grep -qw "$common_group"; thenusermod -aG "$common_group" "$username"echo "用户 $username 已添加到用户组 $common_group"
elseecho "用户 $username 已在用户组 $common_group 中"
fiexit 0
[root@pc1 ~]# bash user_config.sh zhangsan
用户 zhangsan 已创建,密码已设置
正在更改 zhangsan 的 finger 信息。Finger 信息已更改。
用户组 common_group 已创建
用户 zhangsan 已添加到用户组 common_group
[root@pc1 ~]# cat users.txt
zhangsan:faqdvTA7:新创建用户于2025-06-09