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
如何获得完整数字而不是四舍五入到一位数。
答案 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来进行计算。