我正在编写一个 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 包括csh
、ksh
和zsh
。当 shell 访问被禁用时,shell 通常设置为/bin/false
。如果您的系统上的情况如此,请考虑以下测试:
getent passwd "$account" | grep -q '/bin/false' || ret=true