我正在尝试编写一个脚本来检查用户(作为参数发送)是否已登录。如果用户已登录,我希望答案返回 0 到 shell,如果用户未登录,则返回 1 到 shell。
但是我遇到了一些问题。每次我尝试运行脚本时都会收到消息“您需要输入用户”,即使我将用户作为参数发送也是如此。
#!/bin/bash
function checkUser
{
status=0
for u in $(who | awk '{print $1}' | sort | uniq)
do
if [ "$u" = "$1" ]; then
status=1
fi
done
if [ "$status" = "1" ]; then
echo "$user is logged in."
exit 0
else
echo "$user is not logged in."
exit 1
fi
}
if [[ $1 -eq 0 ]] ; then
echo 'You need to enter a user'
read u
else
user=$1
fi
最佳答案
if [[ $1 -eq 0 ]]
检查在函数体之外。这就是为什么它无法访问函数调用的参数 $1
的原因。此外,您甚至没有在任何地方调用该函数。
试试这个:
#!/bin/bash
set -eu
[ $# == 1 ] || {
echo "Usage: $0 USERNAME"
exit 1
}
USER=$1
who | awk '{print $1}' | sort | uniq | grep -q "^$USER\$" && {
echo "$USER is logged in"
exit 0
} || {
echo "$USER is not logged in"
exit 1
}
更新:退出以获得正确的退出代码
关于linux - Bash 脚本 - 检查用户是否登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43736041/