Pergunta

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

Sempre que tento enviar um e-mail usando mailx com a sintaxe acima, eu sempre erro na terceira linha (Mismatch Percentage) on * sign.Nada de errado, eu estou fazendo a multiplicação processo na terceira linha?

Atualização:-

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

Eu tentei o código acima e ainda dá-me erro na primeira linha como ( unexpected.Quaisquer pensamentos por que isso está acontecendo?

Foi útil?

Solução

Funciona para mim:

Portanto, o problema poderia ser qualquer número de coisas, tais como, na verdade, não usando bash (ou uma versão recente dele), não executar o que você já postou aqui, a entrada incorreta, problemas com a EOL de caracteres no arquivo de script.

$ 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

Outras dicas

Utilização de variáveis predefinidas para o fracionária pode evitar longas linhas de comando e de confusão.

De fato, fazendo echo + awk para extrair as partes parecem um exagero.Dependendo de outros aspectos do seu módulo, talvez seja melhor colocá-los em variáveis separadas para começar, em vez de em $QUERY_TEN_DAYS3.

Agora, supondo que está preso com $QUERY_TEN_DAYS3, e é um espaço em branco delimitado valor, na forma de "DIVISOR DIVIDEND ...", outra maneira de dividi-lo é assim:

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

Então, temos:

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

O posicionamento dos parênteses para fazer a divisão de primeira (truncar antes de multiplicar), parece duvidoso, mas é o que você tinha anteriormente.Usando variáveis, é muito mais fácil de identificar pontos como esse.

Supondo que este é o shell bash, você pode usar uma expressão como

$((100 * 4))

para obter uma avaliação de uma expressão aritmética.Substitua '4' com a maior expressão que você forneceu.

Por favor, tente este:

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

Existem também maneiras diferentes de usar expr comando ou deixe de comando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top