繁体   English   中英

Bash 脚本 - 检查用户是否登录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM