-2
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

4 回答 4

1

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

事实上,用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

括号的位置首先进行除法(在乘法之前截断)似乎有问题,但这就是你上面所说的。通过使用变量,更容易发现这样的点。

于 2012-10-02T01:10:47.677 回答
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
于 2012-10-03T02:35:17.137 回答
0

假设这是 bash shell,您可以使用如下表达式

$((100 * 4))

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

于 2012-10-02T00:18:51.297 回答
0

请试试这个:

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

还有使用expr命令或let命令的不同方式。

于 2012-10-02T00:26:28.713 回答