Linux 用于拒绝用户多次登录的Shell脚本
我正在编写一个shell脚本,该脚本在文件“Linux 用于拒绝用户多次登录的Shell脚本,linux,bash,shell,Linux,Bash,Shell,我正在编写一个shell脚本,该脚本在文件“/etc/user.deny”中查找用户列表,如果多次遇到用户名,程序将报告错误消息并退出。到目前为止,我已经: while read user do #something done < ./etc/user.deny 读取用户时 做 #某物 完成
/etc/user.deny
”中查找用户列表,如果多次遇到用户名,程序将报告错误消息并退出。到目前为止,我已经:
while read user
do
#something
done < ./etc/user.deny
读取用户时
做
#某物
完成
如何比较每个人的每个用户名。有没有一种简单的方法可以做到这一点?如果您想在一行出现多次时报告,那么您可能需要单独使用
awk
:
awk 'seen[$0]++ {print "seen more than once: ", $0; exit}' file
在数组
seen[]
中,我们存储每行出现的时间。如果其中一个出现多次,则会触发print
和exit
语句。否则,它会安静地结束。我想他想杀死所有重复登录
#!/bin/bash
#creat a sorted list
who -u | sort -k1,5 -r > userlogins.txt
#
user=""
olduser=""
# read userlist
cat userlogins.txt | while read line; do
# [0] of array is the username
# [1] is terminal
# [3] is login date
# [4] is PID
user=($line)
# echo ${user[0]}
#
# kill terminal if user has more than one login
if [$olduser = ${user[0]}]; then
echo ${user[0]} duplicate
pkill -t ${user[1]}
fi
# remember old user
olduser="${user[0]}"
done
很遗憾,我目前无法测试此脚本。什么是
/etc/user.deny的格式?可能排序和排序就足够了不幸的是,这是一个实验室,文件不是真实的,但我相信文件每行只有一个用户名,这就是itTrysort/tmp/test | uniq-c | sed-n's/^[^0-9]\+[2-9]\+\(.\)$/\1/p'
@alvits使用awk:awk'$1>1检查数字总是更好{打印$2}“
sort/etc/user.deny | uniq-d
是一个更简洁的单行程序。任何打印的内容都会出现不止一次。这是多个用户多次出现的工作,还是在第一个用户多次看到时就退出?一旦找到第一个重复项就退出。这不是要求吗?既然你提到了dup简单的登录,我想如果用户已经登录,OP会拒绝后续登录。因此,可能是由/etc/profile
@Alexander Baltasar Hi执行的脚本,我尝试了该脚本,但我发现错误行17:[:missing]'`知道有什么问题吗,提前谢谢。=)