if else 语句情况下的 cat 输出

if else 语句情况下的 cat 输出
os_version=$(cat /etc/issue |grep Ubuntu)
if $os_version
then
echo found
else
echo notfound
fi

当我在 Ubuntu 机器上尝试时,它显示 ./test: line 2: Ubuntu: command not found notfound

这对我有用,但我想将它分配给一个变量

if cat /etc/issue |grep Ubuntu
then
echo found
else
echo notfound
fi

答案1

if声明称命令,并检查其退出状态。$os_version作为命令使用的方法是展开它并运行生成的命令行。因此,如果变量包含Ubuntu 18.04.1 LTS \n \l,它将尝试运行Ubuntu使用参数18.04.1LTS等调用的命令。

你可能想使用

if [ -n "$os_version" ]; then
    ...
fi

检查变量是否为空([ -n "$var" ]如果不为空则为 true,[ -z "$var" ]如果变量为空则为 true)。

或者,您可以像在编辑中一样在语句本身grep中使用,并在那里设置一个变量:if

distro=unknown
if grep -q Ubuntu < /etc/issue; then
    distro=ubuntu
fi
# ... later
if [ "$distro" = ubuntu ]; then
    # do something Ubuntu-specific
fi

答案2

grep -q Ubuntu /etc/issue && echo found || echo not found

相关内容