登录2次以上的用户——bash脚本

GSa*_*ple 4 bash scripts users

我正在尝试编写一个脚本来检查用户(作为参数)是否同时被记录多次。到目前为止,我有一个脚本然后检查第一个参数并且它工作正常。但是我该如何检查其他用户作为参数呢?这是代码:

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
Run Code Online (Sandbox Code Playgroud)

bash usersscript.sh user1 user2 user3 等等... 感谢您的帮助

ste*_*ver 5

要修改您当前的方法,您需要一个用于不同用户的计数器数组,以及一个额外的循环来$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
Run Code Online (Sandbox Code Playgroud)

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

  • @bac0n 这些天我知道有点不常见,但请参阅 [如何在 for 循环中使用 $1 $2 ... 之类的参数?](https://unix.stackexchange.com/a/314041/65304) (3认同)