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
。有什么想法,为什么会发生?
答案 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 命令的方法也不同。