[英]Bash Script - Check if user is logged in or not
我正在尝试编写一个脚本来检查用户(作为参数发送)是否已登录。 如果用户已登录,我希望答案返回 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
}
更新:退出以获取正确的退出代码
您必须提供以下内容来检查用户是否提供了参数。
if [ $# -eq 0 ] ; then
$#
用于命令行中提供的参数数量
您的完整代码应如下所示:
#!/bin/bash
function checkUser {
status=0
for u in $(who | awk '{print $1}' | sort | uniq)
do
if [ "$u" == "$1" ]; then
return 0
fi
done
return 1
}
if [ $# -eq 0 ] ; then
echo 'You need to enter a user'
read user
checkUser $user
ret_val=$?
else
user=$1
checkUser $user
ret_val=$?
fi
if [ $ret_val -eq 0 ]; then
echo "User Logged In"
exit 0
else
echo "User Not Logged In"
exit 1
fi
echo "Enter Username: "
read check
_user="$(id -u -n)"
if [ "$check" = "$_user" ]
then
echo "User Logged In"
else
echo "User Not Logged In"
fi
这将使您的工作完美无缺!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.