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

Lin*_*00b 1 linux bash shell ubuntu

我正在尝试编写一个脚本来检查用户(作为参数发送)是否已登录。如果用户已登录,我希望答案返回 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
Run Code Online (Sandbox Code Playgroud)

Vil*_*nen 5

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

更新:退出以获得正确的退出代码