1
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如何获得完整的数字而不是四舍五入到一位数字。?

4

2 回答 2

1

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

bash -x test1.sh

#!/bin/bash

作为第一行,仅当您直接执行脚本时才会起作用:

./test1.sh

它需要是“可执行的”才能工作

chmod +x test1.sh

更新

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

需要是

Error Percentage: $((( 100 * $TEST2 ) / $TEST1))
于 2012-10-02T21:41:06.063 回答
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 进行计算。

于 2012-10-02T21:37:15.540 回答