![If - Else语句:判断用户是否为管理员](https://linux22.com/image/152982/If%20-%20Else%E8%AF%AD%E5%8F%A5%EF%BC%9A%E5%88%A4%E6%96%AD%E7%94%A8%E6%88%B7%E6%98%AF%E5%90%A6%E4%B8%BA%E7%AE%A1%E7%90%86%E5%91%98.png)
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