我在下面写了非常简单的逻辑,但它总是抱怨我的条件。
这是我的代码:
#!/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
我已经提到此链接来更正我的代码,但我无法解决此问题:
答案 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