Unixシェルでの計算

Unixシェルでの計算

単純な計算(シェルスクリプトで)を実行するために2 Unixの時間の違いを見つけようとしていますが、うまくいかないようです。

2つの変数を設定しました。 1つは呼び出され、$dもう1つは呼び出されます$c

これは現在の変数の設定に使用する構文です。

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 

ベストアンサー1

c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'

ここにコマンド置換はありません。これは、環境でnull値を設定しながらecho | awkパイプラインを実行します。cecho

以下でコマンド置換を使用しましたが、duration=$(echo "$d - $c")ここでもこれが必要です。つまり

c=$(echo "$a" | awk  ...)

(記号の周りにスペースがないことに注意してください。=これは通常の割り当てとコマンドを区別することです)。シェルスクリプトの変数代入のスペース)

また、awkスクリプトの数字を見ると、31日の月とそれに対応する372日の年があるように見えます。入力に秒がある場合、awkスクリプトは秒を使用しません。 (+ $6最後にaが必要ですか?)$aまた、両方のコマンドで$aおよびではありません$b

duration=$(echo "$d - $c")

durationこれは、与えられた内容だけを印刷して算術を実行しないため、文字列(5678 - 1234合計の実際の値を含む)にのみ設定されます。dcecho

duration=$((d-c))

これにより減算が可能になります。

おすすめ記事