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

标签 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

最佳答案

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/

相关文章:

c++ - 字符数组问题

使用 O_DIRECT 一致写入许多 block

regex - egrep 正则表达式操作未按预期工作

Bash 脚本将文件夹及其子文件夹中的所有 png 文件移动到另一个目录?

java - bash脚本提取jar文件并复制路径

python - 相对路径在 Python 中不起作用

php - 如何设置open_basedir的值?

bash - Vim 从 bash 脚本运行命令并退出而不会使 shell 处于错误状态

regex - 将电子邮件从文件文件夹提取到新文件

python - 通知包版本更改的脚本