使用 mailx 发送邮件时 shell 脚本中的乘法
题
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
. 。有什么想法为什么会发生吗?
解决方案
对我有用:
所以问题可能是很多事情,比如没有实际使用 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
其他提示
对小数部分使用预定义变量可以避免长命令行和混乱。
事实上,做 echo
+ awk
提取零件似乎有点过分了。根据模块的其他方面,最好一开始将它们放入单独的变量中,而不是放入 $QUERY_TEN_DAYS3
.
现在,假设我们陷入困境 $QUERY_TEN_DAYS3
, ,它是一个以空格分隔的值,格式为 "DIVISOR DIVIDEND ..."
, ,另一种分解方法如下:
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
首先进行除法的括号的位置(在乘法之前截断)似乎不确定,但这就是您上面的内容。通过使用变量,可以更容易地发现这样的点。
假设这是 bash shell,您可以使用如下表达式
$((100 * 4))
获得算术表达式的求值。将“4”替换为您提供的较大表达式。
请尝试这个:
$((100 * $(echo $QUERY_TEN_DAYS3 | awk '{print $2}') / $(echo $QUERY_TEN_DAYS3 | awk '{print $1}')))
也有不同的使用方式 表达式 命令或 让 命令。
不隶属于 StackOverflow