表达式未在shell脚本中进行评估

时间:2012-10-02 21:09:29

标签: bash shell unix

TEST1=`echo $QUERY_DAYS3 | awk '{print $1}'`
echo $TEST1

TEST2=`echo $QUERY_DAYS3 | awk '{print $2}'`
echo $TEST2

mailx -s "Data Report" -r uname@host.com uname@host.com <<EOF

Error Percentage: $((100 * ($TEST2/ $TEST1)))

EOF

在我的bash Shell脚本中,我有上面的代码,我将从中发送电子邮件。但是,当我查看我的电子邮件时,我总是看到Error Percentage的内容与我上面的代码中所写的一样。它没有评估乘法和除法表达式。

我正在运行上面的脚本 -

sh -x test1.sh

在我收到的电子邮件中 ​​-

Error  Percentage: $((100 * (183563 / 3793277)))

我正在运行SunOS

我可能需要在这里使用Back-Ticks吗?

更新: -

我目前正在使用的更新脚本 -

TEST1=`echo $QUERY_DAYS3 | awk '{print $1}'`
echo $TEST1

TEST2=`echo $QUERY_DAYS3 | awk '{print $2}'`
echo $TEST2

mailx -s "Data Report" -r uname@host.com uname@host.com <<EOF

Error Percentage: $(( 100 * $TEST2 ) / $TEST1)

EOF

我正在运行它,如下所示 -

sh -c 'exec ./test.sh'

在尝试了很多人的建议之后。我收到了这个错误 -

./test.sh: command substitution: line 176: syntax error near unexpected token `/'
./test.sh: command substitution: line 176: `( 100 * $TEST2 ) / $TEST1'

我现在做错了什么?有什么想法吗?

更新: -

进行更改后,它开始工作 -

Mismatch  Percentage: $((( 100 * $TEST2 ) / $TEST1))

但是在电子邮件中,我获得的百分比仅舍入为4之类的一个数字,而不是显示为4.34563235如何获得完整数字而不是四舍五入到一位数。

2 个答案:

答案 0 :(得分:1)

如果你明确告诉sh执行它,你不能指望它在bash下运行...... 尝试

bash -x test1.sh

#!/bin/bash

作为第一行,仅在直接执行脚本时才有效:

./test1.sh

它必须是“可执行的”才能工作

chmod +x test1.sh

<强>更新

Error Percentage: $(( 100 * $TEST2 ) / $TEST1)

需要

Error Percentage: $((( 100 * $TEST2 ) / $TEST1))

答案 1 :(得分:0)

确保脚本确实以bash运行。 标准的方法是将其作为脚本的第一行:

#!/usr/bin/env bash

虽然没有任何使用SunOS的经验,所以不确定是否可以在那里使用或需要稍作修改。

编辑:现在它与bash一起运行,看起来你需要它:

Error Percentage: $(( ( 100 * $TEST2 ) / $TEST1 ))

更新:bash只进行整数运算。对于浮点运算,你可以做

Error Percentage: `echo "scale=8; ( 100 * $TEST2 ) / $TEST1" | bc`

这将使用bc而不是shell来进行计算。