管理用户(删除指定用户)shell脚本实现

系统中删除一个用户,要慎之又慎。编写一个shell脚本交互式实现用户删除。代码逻辑:
1、获取正确用户名
2、创建函数获取正确的用户名
3、验证获取的用户名
4、确认获取的用户是否存在
5、删除属于用户的进程
6、查找属于用户的文件并输出文件报告便于后续删除
7、删除用户
shell脚本如下:

#!/bin/bash 
# 
#Delete_User - Automates the 4 steps to remove an account 
# 
############################################################### 
# Define Functions 
# 
##################################################### 
function get_answer { 
# 
unset ANSWER 
ASK_COUNT=0 
# 
while [ -z "$ANSWER" ] #While no answer is given, keep asking. 
do ASK_COUNT=$[ $ASK_COUNT + 1 ] 
# case $ASK_COUNT in #If user gives no answer in time allotted 2) echo echo "Please answer the question." echo ;; 3) echo echo "One last try...please answer the question." echo ;; 4) echo echo "Since you refuse to answer the question..." echo "exiting program." echo # exit ;; esac 
# echo 
# if [ -n "$LINE2" ] then #Print 2 lines echo $LINE1 echo -e $LINE2" \c" else #Print 1 line echo -e $LINE1" \c" fi
# 
# Allow 60 seconds to answer before time-out read -t 60 ANSWER 
done 
# Do a little variable clean-up 
unset LINE1 
unset LINE2 
# 
} #End of get_answer function 
# 
##################################################### 
function process_answer { 
# 
case $ANSWER in 
y|Y|YES|yes|Yes|yEs|yeS|YEs|yES ) 
# If user answers "yes", do nothing. 
;; 
*) 
# If user answers anything but "yes", exit script echo echo $EXIT_LINE1 echo $EXIT_LINE2 echo exit 
;; 
esac 
# 
# Do a little variable clean-up 
# 
unset EXIT_LINE1 
unset EXIT_LINE2 
# 
} #End of process_answer function 
# 
############################################## 
# End of Function Definitions 
# 
############# Main Script #################### 
# Get name of User Account to check 
# 
echo "Step #1 - Determine User Account name to Delete " 
echo 
LINE1="Please enter the username of the user " 
LINE2="account you wish to delete from system:" 
get_answer 
USER_ACCOUNT=$ANSWER 
# 
# Double check with script user that this is the correct User Account 
# 
LINE1="Is $USER_ACCOUNT the user account " 
LINE2="you wish to delete from the system? [y/n]" 
get_answer 
# 
# Call process_answer funtion:
# if user answers anything but "yes", exit script 
# 
EXIT_LINE1="Because the account, $USER_ACCOUNT, is not " 
EXIT_LINE2="the one you wish to delete, we are leaving the script..." 
process_answer 
# 
################################################################ 
# Check that USER_ACCOUNT is really an account on the system 
# 
USER_ACCOUNT_RECORD=$(cat /etc/passwd | grep -w $USER_ACCOUNT) 
# 
if [ $? -eq 1 ] # If the account is not found, exit script 
then echo echo "Account, $USER_ACCOUNT, not found. " echo "Leaving the script..." echo exit 
fi 
# 
echo 
echo "I found this record:" 
echo $USER_ACCOUNT_RECORD 
# 
LINE1="Is this the correct User Account? [y/n]" 
get_answer 
# 
# 
# Call process_answer function: 
# if user answers anything but "yes", exit script 
# 
EXIT_LINE1="Because the account, $USER_ACCOUNT, is not " 
EXIT_LINE2="the one you wish to delete, we are leaving the script..." 
process_answer 
# 
################################################################## 
# Search for any running processes that belong to the User Account 
# 
echo 
echo "Step #2 - Find process on system belonging to user account" 
echo 
# 
ps -u $USER_ACCOUNT >/dev/null #Are user processes running? 
# 
case $? in 
1) # No processes running for this User Account # echo "There are no processes for this account currently running." echo 
;; 
0) # Processes running for this User Account. # Ask Script User if wants us to kill the processes. # echo "$USER_ACCOUNT has the following processes running: "echo ps -u $USER_ACCOUNT # LINE1="Would you like me to kill the process(es)? [y/n]" get_answer # case $ANSWER in y|Y|YES|yes|Yes|yEs|yeS|YEs|yES ) # If user answers "yes", # kill User Account processes. # echo echo "Killing off process(es)..." # # List user processes running code in variable, COMMAND_1 COMMAND_1="ps -u $USER_ACCOUNT --no-heading" # # Create command to kill proccess in variable, COMMAND_3 COMMAND_3="xargs -d \\n /usr/bin/sudo /bin/kill -9" # # Kill processes via piping commands together $COMMAND_1 | gawk '{print $1}' | $COMMAND_3 # echo echo "Process(es) killed." ;; *) # If user answers anything but "yes", do not kill. echo echo "Will not kill the process(es)" echo ;; esac 
;; 
esac 
################################################################# 
# Create a report of all files owned by User Account 
# 
echo 
echo "Step #3 - Find files on system belonging to user account" 
echo 
echo "Creating a report of all files owned by $USER_ACCOUNT." 
echo 
echo "It is recommended that you backup/archive these files," 
echo "and then do one of two things:" 
echo " 1) Delete the files" 
echo " 2) Change the files' ownership to a current user account." 
echo 
echo "Please wait. This may take a while..." 
# 
REPORT_DATE=$(date +%y%m%d) 
REPORT_FILE=$USER_ACCOUNT"_Files_"$REPORT_DATE".rpt" 
# 
find / -user $USER_ACCOUNT > $REPORT_FILE 2>/dev/null 
# 
echo
echo "Report is complete." 
echo "Name of report: $REPORT_FILE" 
echo "Location of report: $(pwd)" 
echo 
#################################### 
# Remove User Account 
echo 
echo "Step #4 - Remove user account" 
echo 
# 
LINE1="Remove $USER_ACCOUNT's account from system? [y/n]" 
get_answer 
# 
# Call process_answer function: 
# if user answers anything but "yes", exit script 
# 
EXIT_LINE1="Since you do not wish to remove the user account," 
EXIT_LINE2="$USER_ACCOUNT at this time, exiting the script..." 
process_answer 
# 
userdel $USER_ACCOUNT #delete user account 
echo 
echo "User account, $USER_ACCOUNT, has been removed" 
echo 
# 
exit

脚本运行结果:
在这里插入图片描述
在这里插入图片描述
将已删除用户相关文件删除即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/303774.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

600MA线性锂电池充电芯片 - YB4054DJ

描述: YB4054一款完整的单节锂离子电池充电器。其SOT23-5的封装与较少的外部元件数使得YB4054成为便携式应用的理想选择。采用了内部PMOSFET架构,加上防倒充电路,不需要外部检测电阻器和隔离二极管。热反馈可对充电电流进行自动调节,以便在大…

Commitizen:规范化你的 Git 提交信息

简介 在团队协作开发过程中,规范化的 Git 提交信息可以提高代码维护的效率,便于追踪和定位问题。Commitizen 是一个帮助我们规范化 Git 提交信息的工具,它提供了一种交互式的方式来生成符合约定格式的提交信息。 原理 Commitizen 的核心原…

面试(02)————Java基础和集合

一、Java基础知识 1、面向对象的特征 2、Java 的基本数据类型有哪些 3、JDK JRE JVM 的区别 4、重载和重写的区别 5、Java中和equals的区别 6 、String、StringBuffer、StringBuilder三者之间的区别 7、接口和抽象类的区别是什么? 8、反射 9、jdk1.8 的新特…

AI大模型日报#0409:Llama 3下周发布、特斯联20亿融资、Karpathy新项目

导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 120亿Stable LM 2上线即开源!2万亿token训练,碾压Llama 2 70B 摘要: Stable LM 2 12B参数版本发布&#x…

vue项目中使用html2canvas 下载当前页面(动态页面宽度、高度)

老规矩先上效果图: 需求1、 只要上图红色区域的内容下载,就需要计算红色区域的内容的动态宽度、高度。 需求2、当前页面可视区域的内容下载,上传按钮下面的所有内容。 一、 安装依赖 :安装html2canvas插件 npm isntall html2canvas 或者…

Docker容器嵌入式开发:在Ubuntu上配置Postman和flatpak

在 Ubuntu 上配置 Postman 可以通过 Snap 命令完成,以下是所有命令的总结: sudo snap install postmansudo snap install flatpak在 Ubuntu 上配置 Postman 和 Flatpak 非常简单。以下是一些简单的步骤: 配置 Flatpak 安装 Flatpak&#x…

OpenHarmony实战开发-如何实现一个小鸟避障游戏。

介绍 本示例用于验证OpenHarmony提供的Stage模型,Canvas组件做小游戏的能效是否符合预期,以及验证资源调度子系统的API接口是否符合后台规范运行的预期。 效果预览 使用说明 1.点击ConnectService按钮,创建一个ServiceAbility并连接。 2.…

数据的属性与相似性

目录 一、数据集的结构(一)二维表(二)数据矩阵 二、属性的类型(一)连续属性(二)离散属性(三)分类属性(四)二元属性(五&…

【图论】图的存储--链式前向星存图法以及深度优先遍历图

图的存储 介绍 无向图-就是一种特殊的有向图-> 只用考虑有向图的存储即可 有向图 邻接矩阵邻接表 邻接表 存储结构: (为每一个点开了一个单链表,存储这个点可以到达哪个点) 1:3->4->null2:1->4->null3:4->null4:null 插入一条新的边 比如要插一条边&am…

Go语言不能常量取址!?

题如下图 在软件开发中,常量是一种重要的编程元素,它们在程序中起到固定值的作用被大量使用 Go语言中的常量取址 在 Go 语言中,常量是无法被取址的。这意味着我们不能使用取址操作符 & 来获取常量的地址。例如: const a …

vue3移动端H5 瀑布流显示列表

以上效果 是之前发送的改进版 waterList <template><view class"pro-cons" v-if"data.length"><view class"cons-left"><template v-for"(item, index) in data"><template v-if"(index 1) % 2 1…

scala代码中报Cannot resolve symbol %

1、问题复现 2、解决 &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;检查返回类型&#xff0c;应该是Int 我之前用的&#xff08;.var&#xff09;自动生成返回值&#xff0c;他生成的类型是[Range.Inclusive]&#xff0c;这个类型是scala …

Spring-IoC 基于xml管理

现大多使用注解方式&#xff0c;xml方式并不简洁&#xff0c;本文仅记录xml用作基础学习。 0、前提 首先在父项目的pom.xml中配置好依赖们。然后子模块也可以使用这些依赖。 在resource目录下创建Spring的xml文件&#xff0c;名称无要求&#xff0c;本文使用bean.xml。文件最…

vmware 一打开虚拟机就蓝屏重启

按照正常步骤安装完镜像后&#xff0c;点击 开启此虚拟机 &#xff0c;直接出现下图所示蓝屏&#xff0c;然后重启。 解决的办法是通过修改 启用或关闭windows功能 里的选项&#xff0c;如下图&#xff0c;勾选上 Windows虚拟机监控程序平台 和 虚拟机平台 两项。然后重启电脑…

海外仓的出入库流程有什么痛点?位像素海外仓系统怎么提高出入库效率?

随着跨境电商的蓬勃发展&#xff0c;海外仓是其中不可或缺的一个关键环节。而货物的出库与入库则是海外仓管理中的一个核心业务流程&#xff0c;它的运作效率直接影响到整个跨境物流的效率和客户体验。今天&#xff0c;让我们具体来看一看关于海外仓出入库的流程&#xff0c;其…

Transformer详解和知识点总结

目录 1. 注意力机制1.1 注意力评分函数1.2 多头注意力&#xff08;Multi-head self-attention&#xff09; 2. Layer norm3. 模型结构4. Attention在Transformer中三种形式的应用 论文&#xff1a;https://arxiv.org/abs/1706.03762 李沐B站视频&#xff1a;https://www.bilibi…

正则问题【蓝桥杯】/dfs

正则问题 dfs 刚开始用的是栈&#xff0c;没有想到dfs… #include<iostream> #include<stack> using namespace std; string s; int pos; int dfs() {//ans表示到当前位置最多的x数目//num表示暂存的x数目int num0,ans0;while(pos<s.size()){if(s[pos](){pos;…

虚拟机VMware的下载、注册码(Mac与Windows)

1. 虚拟机的下载 windows 版的虚拟机叫 VMware Workstation mac版的虚拟机叫 VMware Fusion 官网下载地址: window 下载地址 https://www.vmware.com/content/vmware/vmware-published-sites/us/products/workstation-pro.html mac 下载地址 https://www.vmware.com/prod…

C++ STL

C STL&#xff08;标准模板库&#xff09;是一套功能强大的 C 模板类&#xff0c;提供了通用的模板类和函数&#xff0c;这些模板类和函数可以实现多种流行和常用的算法和数据结构&#xff0c;如向量、链表、队列、栈。 学习重点&#xff1a; 组件描述容器&#xff08;Contai…

Linux:文本编辑器 - vim

Linux&#xff1a;文本编辑器 - vim vim基本操作普通模式模式切换移动光标复制粘贴删除替换撤销 底行模式行号查找 vim基本操作 Vim(Vi Improved)是一款功能强大的文本编辑器&#xff0c;是Unix/Linux系统中广泛使用的编辑器之一。它源于上世纪70年代开发的Vi编辑器&#xff0…