Frage

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

Immer wenn ich versuche, eine E-Mail mit zu senden mailx Mit der obigen Syntax erhalte ich immer eine Fehlermeldung in der dritten Zeile (Mismatch Percentage) on * sign.Mache ich beim Multiplikationsprozess in der dritten Zeile etwas falsch?

Aktualisieren:-

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

Ich habe den obigen Code ausprobiert und erhalte in der ersten Zeile immer noch die Fehlermeldung „as“. ( unexpected.Irgendwelche Gedanken, warum es passiert?

War es hilfreich?

Lösung

Funktioniert bei mir:

Das Problem könnte also an einer Reihe von Ursachen liegen, beispielsweise daran, dass es nicht tatsächlich verwendet wird bash (oder eine neuere Version davon), das, was Sie hier gepostet haben, wird nicht ausgeführt, falsche Eingaben, Probleme mit dem EOL-Zeichen in Ihrer Skriptdatei.

$ 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

Andere Tipps

Durch die Verwendung vordefinierter Variablen für die Bruchteile können lange Befehlszeilen und Verwirrung vermieden werden.

Tatsächlich tue ich es echo + awk Die Teile zu extrahieren scheint übertrieben.Abhängig von anderen Aspekten Ihres Moduls ist es möglicherweise besser, sie zunächst in separate Variablen zu packen, als in $QUERY_TEN_DAYS3.

Angenommen, wir bleiben dabei $QUERY_TEN_DAYS3, und es handelt sich um einen durch Leerzeichen getrennten Wert im Formular "DIVISOR DIVIDEND ...", eine andere Möglichkeit, es aufzuteilen, ist so:

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

Dann erhalten wir:

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

Die Positionierung der Klammern, um zuerst die Division durchzuführen (abschneiden, dann multiplizieren), scheint fraglich, aber es ist das, was Sie oben hatten.Durch die Verwendung von Variablen ist es viel einfacher, solche Punkte zu erkennen.

Vorausgesetzt, es handelt sich um die Bash-Shell, können Sie einen Ausdruck wie verwenden

$((100 * 4))

um eine Auswertung eines arithmetischen Ausdrucks zu erhalten.Ersetzen Sie „4“ durch den größeren Ausdruck, den Sie angegeben haben.

Bitte versuchen Sie Folgendes:

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

Es gibt auch verschiedene Verwendungsmöglichkeiten Ausdruck Befehl bzw lassen Befehl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top