登录超过 2 次的用户 - bash 脚本

登录超过 2 次的用户 - bash 脚本

我正在尝试编写一个脚本来检查用户(作为参数)是否同时登录多次。到目前为止,我有一个脚本,然后检查第一个参数,它运行良好。但我该如何检查其他用户作为参数?以下是代码:

for users in $(w -h)
do    
if [ "$users" = "$1" ]
then echo "User $1 is logged in"
counter=$((counter+1))
fi
done    
if [ "$counter" > 1 ]
then echo "User $1 is logged $counter times"
else
echo "User $1 is logged less than two times"
fi

bash usersscript.sh 用户1 用户2 用户3 等... 感谢您的帮助

答案1

要修改当前的方法,您需要为不同的用户创建一个计数器数组,以及一个额外的循环来$users针对每个位置参数测试每个值$1,,$2...。

请注意,for users in $(w -h)循环遍历输出中的所有空格分隔的标记w -h,而不仅仅是用户名 - 它可能“有效”(因为其他标记不太可能与有效的用户名匹配)但它不是“正确的” - 您可以用它$(w -h | cut -d ' ' -f1)来仅提取用户名。

对于更简单的方法,您可以w -h对命令行中给出的每个用户名运行,并计算输出的行数,例如使用wc -l

#!/bin/sh

for user do

  counter=$(w -h "$user" | wc -l)

  if [ "$counter" -gt 2 ]; then
    printf "user %s is logged in %d times\n" "$user" "$counter"
  else
    printf "user %s is logged in less than two times\n" "$user"
  fi

done

请注意,bash这不是必需的 - 您可以使用更轻的/bin/shshell(尽管相同的代码将在 bash 中运行)。

相关内容