使用mailx发送邮件时在shell脚本中的乘法

时间:2012-10-02 00:10:39

标签: bash shell mailx

mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF

Total Items Purchased as per EDW: `echo $QUERY_TEN_DAYS3 | awk '{print $1}'`

Total Items Missing or Mismatch : `echo $QUERY_TEN_DAYS3 | awk '{print $2}'`

Mismatch  Percentage: `100*((echo $QUERY_TEN_DAYS3 | awk '{print $2}')/(echo $QUERY_TEN_DAYS3 | awk '{print $1}'))`

EOF

每当我尝试使用mailx使用上述语法发送电子邮件时,我总是会在第三行(Mismatch Percentage) on * sign上收到错误。我在第三行的乘法过程中做错了什么?

更新: -

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

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

mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF
Comparison using previous day’s data

******************************************

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

EOF

我已经尝试了上面的代码但仍然在第一行给出了错误( unexpected。有什么想法,为什么会发生?

4 个答案:

答案 0 :(得分:1)

对小数部分使用预定义变量可以避免长命令行和混淆。

事实上,执行echo + awk来提取部件似乎有些过分。根据模块的其他方面,最好先将它们放入单独的变量中,而不是放入$QUERY_TEN_DAYS3

现在,假设我们仍然坚持使用$QUERY_TEN_DAYS3,并且它是"DIVISOR DIVIDEND ..."形式的白色空格分隔值,另一种分解方式就是这样:< / p>

read -r FOO BAR JUNK <<<"$QUERY_TEN_DAYS3"

然后,我们得到:

mailx -s "Report for $DATE_TENDAYS_FORMAT1" -r uname@host.com uname@host.com <<EOF

Total Items Purchased as per EDW: $FOO

Total Items Missing or Mismatch : $BAR

Mismatch  Percentage: $((100 * ($BAR / $FOO)))

EOF

括号的位置首先进行除法(在乘法之前截断)似乎是不确定的,但它是你上面所拥有的。通过使用变量,可以更容易地发现这样的点。

答案 1 :(得分:1)

适合我:

所以问题可能是任何数量的事情,例如实际上没有使用bash(或它的最新版本),没有运行你在这里发布的内容,不正确的输入,EOL角色的问题你的脚本文件。

$ echo $BASH_VERSION
3.00.15(1)-release

$ QUERY_TEN_DAYS3="1 2"

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

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

$ cat <<EOF
> Comparison using previous day’s data
>
> ******************************************
>
> Mismatch  Percentage: $((100 * ($TEST2/ $TEST1)))
>
> EOF
Comparison using previous day’s data

******************************************

Mismatch  Percentage: 200

答案 2 :(得分:0)

假设这是bash shell,你可以使用像

这样的表达式
$((100 * 4))

获得算术表达式的评估。将'4'替换为您提供的较大表达式。

答案 3 :(得分:0)

请试试这个:

$((100 * $(echo $QUERY_TEN_DAYS3 | awk '{print $2}') / $(echo $QUERY_TEN_DAYS3 | awk '{print $1}')))

使用 expr 命令或 let 命令的方法也不同。