If - Else语句:判断用户是否为管理员

If - Else语句:判断用户是否为管理员
read -p "What is your name?:" ANSWER
if ["$ANSWER" == "root"]
    then
        echo "Hello, administrator"
    else
        echo "Hello, $ANSWER" 
fi

如果我在控制台中回答“root”,我假设会得到“你好,管理员”,但我总是得到第二种情况。我究竟做错了什么? [我还尝试了不同的 if 条件,例如“$ANSWER”=“myname”,但它仍然不起作用]。提前致谢!

答案1

您的代码存在语法问题。测试中[前后必须有一个空格:]

read -p "What is your name?:" ANSWER

if [ "$ANSWER" == "root" ]; then
    echo 'Hello, administrator'
else
    printf 'Hello, %s\n' "$ANSWER"
fi

此外,您可能希望使用该id实用程序来获取用户的 UID。 root 用户的 UID 始终为零:

if [ "$(id -u)" -eq 0 ]; then
    echo 'Hello, administrator'
else
    printf 'Hello, %s\n' "$(id -u -n)"
fi

id -u将返回当前用户的 UID 作为正整数,同时id -u -n将返回用户名。您还可以使用$USER$LOGNAME打印用户名,但在比较中使用 UID(数字)更安全。

shellbash还将当前用户的 UID 存储在 中$UID,因此在 中bash,您可以编写

if [ "$UID" -eq 0 ]; then
    echo 'Hello, administrator'
else
    printf 'Hello, %s\n' "$USER"
fi

相关内容