语法错误:bash脚本

时间:2016-09-20 17:01:48

标签: bash shell

在我的bash脚本中,我正在尝试浮点比较,例如。

a=0.32
b=0.38

我在下面写了一段代码,

if [[ $(`bc-l <<< "$b > $a"`) -eq 0 ]]; then
echo "true"
else
echo "false"
fi

请建议。

3 个答案:

答案 0 :(得分:1)

确保您实际上在bash shell中运行。

#!/bin/bash
a=0.32; b=0.18; c=0.60    
if [[ $(bc -l <<< "$a > $b") -eq 1 ]]; then
    echo "$a > $b"
else
    echo "$a <= $b"
fi

if [[ $(bc -l <<< "$a > $c") -eq 1 ]]; then
    echo "$a > $c"
else
    echo "$a <= $c"
fi

答案 1 :(得分:1)

只需将set -x添加到您的脚本中即可显示其正在做的事情会有所帮助:

#!/bin/bash

set -x

a=0.32
b=0.38

if [[ $(`bc-l <<< "$b > $a"`) -eq 0 ]]; then
echo "true"
else
echo "false"
fi

输出:

+ a=0.32
+ b=0.38
+++ bc-l
./39599898.sh: line 8: bc-l: command not found
+ [[ '' -eq 0 ]]
+ echo true
true

您可能需要bc -l,而不是bc-l

+ a=0.32
+ b=0.38
+++ bc -l
++ 1
./39599898.sh: line 8: 1: command not found
+ [[ '' -eq 0 ]]
+ echo true
true

那更像是它。现在看起来您只想比较1 bc的{​​{1}}输出,而不是将其作为命令运行:

if [[ $(bc -l <<< "$b > $a") -eq 0 ]]; then
echo "true"
else
echo "false"
fi
+ a=0.32
+ b=0.38
++ bc -l
+ [[ 1 -eq 0 ]]
+ echo false
false

您可以进一步简化,因为您寻找的输出是布尔值,因此与0进行比较只是:

if ! let $(bc -l <<< "$b > $a"); then
echo "true"
else
echo "false"
fi

答案 2 :(得分:0)

您的脚本中存在语法错误。

  • $()或后退标记用于命令替换,而不是两者。

您可以将其更正为

if [[ $(bc -l <<< "$b > $a") -eq 0 ]]; then
    echo "true"
else
    echo "false"
fi