2015-10-26 85 views
-1

我正在编写一个shell脚本,用于查找文件“/etc/user.deny”中的用户列表,并且如果多次遇到用户名,程序将报告一条出口错误消息。到目前为止,我有:Shell脚本拒绝用户登录多次

while read user 
do 
    #something 
done < ./etc/user.deny 

我该如何比较每个用户名。有没有简单的方法来做到这一点?

+1

'/ etc/user.deny'的格式是什么?可能排序和排序就足够了 – fedorqui

+0

不幸的是,这是一个实验室,并且该文件不是真实的,但我相信该文件将只在每行只有一个用户名,这就是它 – coopwatts

+0

尝试'sort/tmp/test | uniq -c | sed -n's/^ [^ 0-9] \ + [2-9] \ + \(。* \)$/\ 1/p''。 – alvits

回答

0

我觉得他要杀死所有重复登录

#!/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 

不幸的是我有没有可能在目前来测试这个脚本。

+0

既然你提到了重复登录,我想OP会拒绝后续登录,如果用户已经登录。那么也许它会是'/ etc/profile'执行的脚本。 – alvits

+0

@亚历山大Baltasar嗨,我试了脚本,但我错误第17行:[:失踪]''任何想法是什么错,事先感谢。 =) –

0

如果您想在一个线出现不止一次地报告,那么你可能想单独使用awk

awk 'seen[$0]++ {print "seen more than once: ", $0; exit}' file 

在阵列seen[]我们存储时代的每一行出现。如果出现多次,它会触发printexit声明。否则,它静静地结束。

+0

这项多次出现多次用户的作品是否会多次出现,或者会在首次出现多次用户时退出? – coopwatts

+0

一旦找到第一个副本,就会退出。这不是要求吗? – fedorqui