(シェルスクリプトで)簡単な計算を行うために、UNIXの2回の違いを計算しようとしていますが、うまくいかないようです。
1つは$d
、もう1つは$c
という2つの変数を設定しました。
変数を設定するために現在使用している構文は次のとおりです。
c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $c
d= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
echo $d
(変数aとbは、単に別のスクリプトからタイムスタンプを受け取ります)
$c
から$d
の出力を減算しようとしていますが、使用したすべての方法が機能しないようです。
私は以下を試しました:1)
duration=$(echo "$d - $c")
echo $duration
2)
duration=$((d-c))
echo $duration
_c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'
_
ここにコマンド置換がありません。これは、c
の環境でecho
を空の値に設定しながら、_echo | awk
_パイプラインを実行するだけです。
以下のduration=$(echo "$d - $c")
でコマンド置換を使用しましたが、これもここで必要です。つまり.
_c=$(echo "$a" | awk ...)
_
(_=
_記号の前後に空白がないことに注意してください。これにより、プレーン割り当てとコマンドが区別されます。 シェルスクリプトの変数割り当てのスペース を参照してください。
また、awkスクリプトの数値を見ると、31日の月、したがって372日の年があるように見えますが、これは希望する場合とそうでない場合があります。入力に秒もある場合、awkスクリプトはそれらを使用しません。 (最後に_+ $6
_があるべきですか?)両方のコマンドには、_$a
_と_$a
_の代わりに_$b
_もあります。
_duration=$(echo "$d - $c")
_
duration
は指定されたものを出力するだけで、算術演算は行わないため、これはd
を_5678 - 1234
_(実際の値はc
およびecho
)のような文字列に設定するだけです。
_duration=$((d-c))
_
これは減算を行うために機能するはずです。
どのシェルを使用していますか?算術演算は古い学校では実装されていません/bin/sh
しかし、bashではかなりうまく機能します:
~$ a=10000000
~$ b=200
~$ echo $((a-b))
9999800