该脚本非原创,仅发出来做学习参考交流。
一个删除用户的脚本,思路清晰,构思慎密,考虑方方面面,是学习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,如需转载请自行联系原作者