Bash 无法与if条件进行正确比较
我在下面写了非常简单的逻辑,但它总是抱怨我的if条件 这是我的密码:Bash 无法与if条件进行正确比较,bash,shell,Bash,Shell,我在下面写了非常简单的逻辑,但它总是抱怨我的if条件 这是我的密码: #!/bin/sh UBUNTU_VERSION=`lsb_release -r | awk '{ print $2}'` echo "UBUNTU_VERSION - $UBUNTU_VERSION" if [[ "$UBUNTU_VERSION" -eq "14.04" ]]; then echo "Ubuntu 14.04" else echo "Not Ubuntu 14.04"
#!/bin/sh
UBUNTU_VERSION=`lsb_release -r | awk '{ print $2}'`
echo "UBUNTU_VERSION - $UBUNTU_VERSION"
if [[ "$UBUNTU_VERSION" -eq "14.04" ]];
then
echo "Ubuntu 14.04"
else
echo "Not Ubuntu 14.04"
fi
我得到的错误是:
./test.sh: 6: ./1.sh: [[: not found
./test.sh: 6: [: Illegal number: 14.04
如果我将代码更改为:
if [ "$UBUNTU_VERSION" -eq "14.04" ];
或
我得到的错误是:
./test.sh: 6: ./1.sh: [[: not found
./test.sh: 6: [: Illegal number: 14.04
我已经提到了这个链接来更正我的代码,但我无法修复:
- 使用
shebang位于顶部,用于使用bash语法#/bin/bash
仅用于整数比较,请使用eq
或=
=
- 使用
替换命令,而不是老式的、有缺陷的反向标记$(…)
#!/bin/bash
UBUNTU_VERSION=$(lsb_release -r | awk '{ print $2}')
echo "UBUNTU_VERSION - $UBUNTU_VERSION"
if [[ $UBUNTU_VERSION == "14.04" ]];
then
echo "Ubuntu 14.04"
else
echo "Not Ubuntu 14.04"
fi
- 使用
shebang位于顶部,用于使用bash语法#/bin/bash
仅用于整数比较,请使用eq
或=
=
- 使用
替换命令,而不是老式的、有缺陷的反向标记$(…)
#!/bin/bash
UBUNTU_VERSION=$(lsb_release -r | awk '{ print $2}')
echo "UBUNTU_VERSION - $UBUNTU_VERSION"
if [[ $UBUNTU_VERSION == "14.04" ]];
then
echo "Ubuntu 14.04"
else
echo "Not Ubuntu 14.04"
fi
[[
是bash ism,即它是bash
关键字
当您将脚本解释为
sh
,它可能不是bash
,并且不支持[
(dash
?),因此出现错误。[[
是bash ism,即它是bash
关键字
当您将脚本解释为
sh
,它可能不是bash
,并且不支持[[/code>(dash
?),因此出现错误。注意:-eq,-ne,-gt,-lt用于比较整数。对于字符串,它将不起作用。您需要使用==,!=
UBUNTU_VERSION=`lsb_release -r | awk '{ print $2}'`
echo "UBUNTU_VERSION - $UBUNTU_VERSION"
if [ "$UBUNTU_VERSION" == "14.04" ];
then
echo "Ubuntu 14.04"
else
echo "Not Ubuntu 14.04"
fi
注意:-eq,-ne,-gt,-lt用于比较整数。对于字符串,它将不起作用。您需要使用==,!=
UBUNTU_VERSION=`lsb_release -r | awk '{ print $2}'`
echo "UBUNTU_VERSION - $UBUNTU_VERSION"
if [ "$UBUNTU_VERSION" == "14.04" ];
then
echo "Ubuntu 14.04"
else
echo "Not Ubuntu 14.04"
fi
使用“=”比较器。-eq保留用于整数比较。使用“=”比较器。-eq保留用于整数比较。