用户管理脚本之删除用户——Delete_user.sh

简介:

 该脚本非原创,仅发出来做学习参考交流。

   一个删除用户的脚本,思路清晰,构思慎密,考虑方方面面,是学习shell脚本方面的好例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
   1   #!/bin/bash
   2
   3   function  get_answer {
   4   unset  ANSWER
   5  ASK_COUNT=0
   6   while  [ -z  "$ANSWER"  ]
   7   do
   8      ASK_COUNT=$[ $ASK_COUNT + 1 ]
   9       case  $ASK_COUNT  in
  10      2)
  11         echo
  12         echo  "Please answer the question."
  13         echo
  14      ;;
  15      3)
  16         echo
  17         echo  "One last try ... please answer the question."
  18         echo
  19      ;;
  20      4)
  21         echo
  22         echo  "Since you refuse to answer the question..."
  23         echo  "exiting program."
  24         echo
  25         #
  26         exit
  27      ;;
  28       esac
  29
  30       echo
  31    
  32       if  [ -n  "$LINE2"  ]
  33       then
  34         echo  $LINE1
  35         echo  -e $LINE2 " \c"
  36       else
  37         echo  -e $LINE1 " \c"
  38       fi
  39
  40       read  -t 60 ANSWER
  41   done
  42   unset  LINE1
  43   unset  LINE2
  44  }
  45
  46   function  process_answer {
  47   case  $ANSWER  in
  48  y|Y| yes |Yes|yEs|yeS|YEs|YES)
  49  ;;
  50  *)
  51      echo
  52      echo  $EXIT_LINE1
  53      echo  #EXIT_LINE2
  54      echo
  55      exit
  56  ;;
  57   esac
  58   unset  EXIT_LINE1
  59   unset  EXIT_LINE2
  60  }
  61
  62
  63   echo  "Step #1 - Determine User Account name to Delete "
  64   echo
  65  LINE1= "Please enter the username of the user"
  66  LINE2= "account you wish to delete from system:"
  67  get_answer
  68  USER_ACCOUNT=$ANSWER
  69
  70  LINE1= "IS $USER_ACCOUNT the user account"
  71  LINE2= "you wish to delete from the system?[y|n]"
  72  get_answer
  73
  74  EXIT_LINE1= "Because the account,$USER_ACCOUNT,is not"
  75  EXIT_LINE2= "the one you wish to delete,we are leaving the script..."
  76  process_answer
  77
  78  USER_ACCOUNT_RECORD=$( cat  /etc/passwd  grep  -w $USER_ACCOUNT)
  79   if  [ $? - eq  1 ]
  80   then
  81      echo
  82      echo  "Account,$USER_ACCOUNT,not found."
  83      echo  "Leaving the script..."
  84      echo
  85      exit
  86   fi
  87
  88   echo
  89   echo  "I found this record:"
  90   echo  $USER_ACCOUNT_RECORD
  91   echo
  92
  93  LINE1= "Is this the correct User Account? [y|n]"
  94  get_answer
  95
  96  EXIT_LINE1= "Because the account,$USER_ACCOUNT,is not"
  97  EXIT_LINE2= "the one you wish to delete,we are leaving the script..."
  98  process_answer
  99
100   echo
101   echo  "Step #2 - Find process on system belonging to user Account"
102   echo
103   echo  "$USER_ACCOUNT has the following processes running:"
104   echo
105
106   ps  -u $USER_ACCOUNT
107
108   case  $?  in
109  1)
110      echo  "There are no processes for this account currently running."
111      echo
112  ;;
113  0)
114      unset  ANSWER
115     LINE1= "Would you like me to kill the process(es)?[y|n]"
116     get_answer
117
118      case  $ANSWER  in
119     y|Y| yes |Yes|yEs|yeS|YEs|YES)
120      echo
121      trap  "rm $USER_ACCOUNT_Running_Process.rpt"  SIGTERM SIGINT SIGQUIT
122      ps  -u $USER_ACCOUNT > $USER_ACCOUNT_Running_Process.rpt
123      exec  < $USER_ACCOUNT_Running_Process.rpt
124      read  USER_PROCESS_REC
125      read  USER_PROCESS_REC
126      while  [ $? - eq  0 ]
127         do
128        USER_PID=$( echo  $USER_PROCESS_REC |  cut  -d  " "  -f1)
129         kill  -9 $USER_PID
130         echo  "Killed process $USER_PID"
131         read  USER_PROCESS_REC
132         done
133
134         echo
135         rm  $USER_ACCOUNT_Running_Process.rpt
136     ;;
137     *)
138         echo
139         echo  "Will not kill the process(es)"
140         echo
141     ;;
142      esac
143  ;;
144   esac
145
146
147   echo
148   echo  "Step #3 - Find files on system belonging to user account"
149   echo
150   echo  "Creating a report of all files owned by $USER_ACCOUNT."
151   echo
152   echo  "It is recommended that you backup/archive these files."
153   echo  "and then do one of two things:"
154   echo  "   1) Delete the files"
155   echo  "   2) Change the files' ownership to a current user account."
156   echo
157   echo  "Please wait. This may take a while..."
158
159
160  REPORT_DATE=` date  +%y%m%d`
161  REPORT_FILE=$USER_ACCOUNT "_Files_" $REPORT_DATE.rpt
162
163   find  / -user $USER_ACCOUNT > $REPORT_FILE 2>  /dev/null
164
165   echo
166   echo  "Report is complete."
167   echo  "Name of report:      $REPORT_FILE"
168   echo  "Location of report:      `pwd`"
169   echo
170
171   echo
172   echo  "Step #4 - Remove user account"
173   echo
174
175  LINE1= "Do you wish to remove $User_Account's account from system?[y|n]"
176  get_answer
177
178
179  EXIT_LINE1= "Since you do not wish to remove the user account."
180  EXIT_LINE2= "$USER_ACCOUNT at this time.exiting the script..."
181  process_answer
182
183  userdel $USER_ACCOUNT
184   echo
185   echo  "User account,$USER_ACCOUNT,has been removed."
186   echo









本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1379372,如需转载请自行联系原作者

目录
相关文章
|
算法 网络虚拟化 数据安全/隐私保护
计算机网络-局域网
计算机网络-局域网
931 0
|
数据采集 C语言
单片机开发之ADC0808/9信号采集
本文主要介绍了单片机开发之ADC0808/9信号采集
840 0
单片机开发之ADC0808/9信号采集
|
23天前
|
机器学习/深度学习 人工智能 供应链
构建AI智能体:十四、从“计算”到“洞察”:AI大模型如何让时间序列数据“开口说话”
时间序列模型是分析和预测时序数据的核心工具,广泛应用于销量预测、趋势分析和异常检测。本文深入浅出地讲解其基本概念、组成成分(趋势、季节性、残差)、平稳性处理及主流模型如Holt-Winters和ARIMA,并结合代码实例展示建模全过程,帮助读者掌握从数据预处理到预测可视化的关键技能,实现数据驱动的科学决策。
352 6
|
1月前
|
Go API 数据库
腾讯WeKnora 架构学习指南
《WeKnora架构学习指南》系统解析了这一腾讯开源的智能知识库项目,涵盖核心架构、技术栈、代码结构与学习路径。通过生活化类比和深度流程图解,帮助开发者从零掌握Go后端、Vue前端、RAG原理及微服务协同,提供四阶段进阶路线与实战建议,助力快速上手并参与贡献。
408 3
|
1月前
|
移动开发 算法 5G
面向高多普勒衰落信道的 OTFS 调制技术
正交时频空(OTFS)调制通过延迟-多普勒域传输,将高多普勒信道转化为准静态环境,显著提升高速移动下的通信鲁棒性。本文研究其信号检测与信道估计,提出低复杂度MCMC检测算法和基于PN导频的稀疏信道估计算法,验证了OTFS在高速场景下的优异性能。
326 0
面向高多普勒衰落信道的 OTFS 调制技术
|
6月前
|
编解码 算法 数据可视化
Scanpy 分析 scRNA-seq:细胞类型注释
Scanpy 分析 scRNA-seq:细胞类型注释
Scanpy 分析 scRNA-seq:细胞类型注释
|
Java 开发工具 git
实现基于Spring Cloud的配置中心
实现基于Spring Cloud的配置中心
|
存储 安全 Java
【多线程面试题 七】、 说一说Java多线程之间的通信方式
Java多线程之间的通信方式主要有:使用Object类的wait()、notify()、notifyAll()方法进行线程间协调;使用Lock接口的Condition的await()、signal()、signalAll()方法实现更灵活的线程间协作;以及使用BlockingQueue作为线程安全的队列来实现生产者和消费者模型的线程通信。
|
关系型数据库 MySQL 数据库
MySQL数据库—查询:关联查询(一篇教会你在多表关联下查询数据)
MySQL数据库—查询:关联查询(一篇教会你在多表关联下查询数据)
1156 0