用于检查 shell 访问的 Bash 脚本

用于检查 shell 访问的 Bash 脚本

我正在编写一个 shell 脚本来轻松管理帐户。我希望有一个选项来启用和禁用 shell 访问(这很容易),但棘手的部分是查找帐户是否已经具有 shell 访问权限,以便我的脚本可以显示正确的选项。

这是我目前拥有的:

注意:$account是给定的帐户

function checkIfShellAccess
{
    ret=false
    getent passwd $account >'/bin/bash' 2>&1 && ret=true

    if $ret; then
        HAS_SHELL=1
    else
        HAS_SHELL=0
    fi
}

我的问题是:当我运行脚本并检查用户是否具有 shell 访问权限时,我收到以下通知:

line 241: /bin/bash: Text file busy

第 241 行是:

getent passwd $account >'/bin/bash' 2>&1 && ret=true

我在用:CentOS release 6.5 (Final)

感谢您对此提供的任何帮助。

答案1

getent passwd $account >'/bin/bash' 2>&1 && ret=true

上面的行试图覆盖/bin/bash。您不想这样做。要测试/bin/bash所返回的行中是否存在 of getent,请改用:

getent passwd "$account" | grep -q '/bin/bash' && ret=true

这将起作用,因为grep根据是否找到文本来设置退出代码。

但是,用户可以使用许多不同的 shell。这些 shell 包括cshkshzsh。当 shell 访问被禁用时,shell 通常设置为/bin/false。如果您的系统上的情况如此,请考虑以下测试:

getent passwd "$account" | grep -q '/bin/false' || ret=true

相关内容