![登录超过 2 次的用户 - bash 脚本](https://linux22.com/image/1020697/%E7%99%BB%E5%BD%95%E8%B6%85%E8%BF%87%202%20%E6%AC%A1%E7%9A%84%E7%94%A8%E6%88%B7%20-%20bash%20%E8%84%9A%E6%9C%AC.png)
我正在尝试编写一个脚本来检查用户(作为参数)是否同时登录多次。到目前为止,我有一个脚本,然后检查第一个参数,它运行良好。但我该如何检查其他用户作为参数?以下是代码:
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/sh
shell(尽管相同的代码将在 bash 中运行)。