【问题标题】:Shell script if statement [: unexpected operator [closed]Shell脚本if语句[:意外运算符[关闭]
【发布时间】:2016-03-31 15:13:11
【问题描述】:

我正在尝试创建一个非常简单的 shell 脚本来检测它是否以root 运行。出于某种原因,下面的代码在第 6 行生成了一个Error: [: stackunderflow: unexpected operator,我不知道为什么?我有这个在 bash 脚本上工作,但是为了可移植性和一些教育,我想用一个 shell 脚本来做这个。

#!/bin/sh
##
# Check for root launch
#
set -e
USER="$(id -un 2>/dev/null || true)"
if [ "$USER" == 'root' ]; then
    echo "You must be a root user"
    exit 1
else
    echo 'Not root!'
    exit 0
fi

这是从 Debian Jessie amd64 桌面以./check.sh 运行的。

【问题讨论】:

  • 将“==”替换为“=”
  • 谢谢你:)
  • 旁注:您正在覆盖USER environment variable。这就是为什么强烈建议不要使用大写的变量名!
  • 啊啊,谢谢。我会相应地调整脚本。

标签: linux shell debian sh


【解决方案1】:

首先,您将它标记为 bash,它是 bourne。正如 sigmalha 指出的那样,您使用了错误的运算符。使用 = 而不是 ==。

此外,您在成功时失败(退出 1),在失败时成功(退出 0)。

【讨论】:

  • 谢谢,抱歉..我想我还在学习。
  • 没问题,我们曾经都是初学者