Domanda

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
.

Ogni volta che provo a inviare un'e-mail utilizzando mailx con la sintassi sopra riportata, ottengo sempre errori su terza linea (Mismatch Percentage) on * sign.Qualcosa di sbagliato che sto facendo nel processo di moltiplicazione in terza linea?

Aggiornamento: -

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
.

Ho provato il codice sopra e ancora mi dà errore sulla prima riga come ( unexpected.Qualche idea perché sta accadendo?

È stato utile?

Soluzione

funziona per me:

Quindi il problema potrebbe essere un numero qualsiasi di cose, ad esempio non utilizzando bash (o una versione recente), non eseguendo ciò che hai postato qui, ingresso errato, problemi con il carattere EOL nel tuo file di 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
.

Altri suggerimenti

L'uso di variabili predefinite per le parti frazionarie può evitare lunghe linee di comando e confusione.

Infatti, facendo echo + awk per estrarre le parti sembrano eccedenze.A seconda degli altri aspetti del tuo modulo, potrebbe essere meglio metterli in variabili separati per cominciare, piuttosto che in $QUERY_TEN_DAYS3.

Ora, supponendo che siamo bloccati con $QUERY_TEN_DAYS3, ed è un valore delimitato dallo spazio bianco nel modulo "DIVISOR DIVIDEND ...", un altro modo per romperlo è come:

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

Allora, otteniamo:

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
.

Il posizionamento delle parentesi per fare la divisione prima (truncati prima di moltiplicare) sembra Iffy, ma è quello che avevi sopra.Usando le variabili, è molto più facile individuare punti come questo.

Supponendo che questo sia il guscio di bash, puoi usare un'espressione come

$((100 * 4))
.

per ottenere una valutazione di un'espressione aritmetica.Sostituisci '4' con l'espressione più grande che hai fornito.

Si prega di provare questo:

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

Ci sono anche modi diversi che utilizzano comando expr o let comando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top