1
TEST1=`echo $QUERY_DAYS3 | awk '{print $1}'`
echo $TEST1

TEST2=`echo $QUERY_DAYS3 | awk '{print $2}'`
echo $TEST2

mailx -s "Data Report" -r uname@host.com uname@host.com <<EOF

Error Percentage: $((100 * ($TEST2/ $TEST1)))

EOF

私のbashシェルスクリプトには、メールを送信する上記のコードがあります。しかし、メールをチェックするError Percentageと、上記のコードで書かれているように書かれていることが常にわかります。乗除算式の評価ではありません。

上記のスクリプトを次のように実行しています-

sh -x test1.sh

メールで私はこのように受け取ります-

Error  Percentage: $((100 * (183563 / 3793277)))

私は走っていSunOSます。

ここで使用する必要があるかもしれBack-Ticksませんか?

アップデート:-

現在使用している更新されたスクリプト-

TEST1=`echo $QUERY_DAYS3 | awk '{print $1}'`
echo $TEST1

TEST2=`echo $QUERY_DAYS3 | awk '{print $2}'`
echo $TEST2

mailx -s "Data Report" -r uname@host.com uname@host.com <<EOF

Error Percentage: $(( 100 * $TEST2 ) / $TEST1)

EOF

以下のように実行しています-

sh -c 'exec ./test.sh'

多くの人から与えられた提案を試した後。このエラーが発生しています-

./test.sh: command substitution: line 176: syntax error near unexpected token `/'
./test.sh: command substitution: line 176: `( 100 * $TEST2 ) / $TEST1'

私は今何をしているのですか?何かご意見は?

アップデート:-

変更を加えた後、動作を開始します-

Mismatch  Percentage: $((( 100 * $TEST2 ) / $TEST1))

しかし、電子メールでは、取得したパーセンテージは、 1 桁に丸められるのではなく、どのよう4に表示されるのではなく、1 つの数字のみに丸められました。4.34563235

4

2 に答える 2

1

明示的に実行するように指示した場合、bashで実行されることは期待できませんsh...試してください

bash -x test1.sh

持つ

#!/bin/bash

最初の行として、スクリプトを直接実行した場合にのみ機能します。

./test1.sh

それが機能するには、「実行可能」である必要があります

chmod +x test1.sh

アップデート

Error Percentage: $(( 100 * $TEST2 ) / $TEST1)

する必要があります

Error Percentage: $((( 100 * $TEST2 ) / $TEST1))
于 2012-10-02T21:41:06.063 に答える
0

スクリプトが実際に bash で実行されることを確認してください。これを行う標準的な方法は、これをスクリプトの最初の行にすることです。

#!/usr/bin/env bash

ただし、SunOS の経験がないので、それがそこで機能するかどうか、または若干の変更が必要かどうかはわかりません。

編集:bashで実行されるようになったので、次のようにする必要があるようです:

Error Percentage: $(( ( 100 * $TEST2 ) / $TEST1 ))

更新: bash は整数演算のみを行います。浮動小数点演算の場合、次のことができます

Error Percentage: `echo "scale=8; ( 100 * $TEST2 ) / $TEST1" | bc`

これは、計算を行うためにシェルの代わりにbcを使用します。

于 2012-10-02T21:37:15.540 に答える