无法与if条件

时间:2016-06-22 07:09:29

标签: bash shell

我在下面写了非常简单的逻辑,但它总是抱怨我的条件。

这是我的代码:

#!/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

如果我将代码更改为:

if [ "$UBUNTU_VERSION" -eq "14.04" ];

if [ $UBUNTU_VERSION -eq "14.04" ];

我收到错误:

./test.sh: 6: [: Illegal number: 14.04

我已经提到此链接来更正我的代码,但我无法解决此问题:

bash : Illegal number

3 个答案:

答案 0 :(得分:4)

  • 使用顶部的#!/bin/bash shebang来使用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

答案 1 :(得分:1)

[[是bash-ism,即bash个关键字。

当您将脚本解释为sh时,其可能不是bash且不支持[[dash?),因此错误。

答案 2 :(得分:1)

注意:-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