単純な計算(シェルスクリプトで)を実行するために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
パイプラインを実行します。c
echo
以下でコマンド置換を使用しましたが、duration=$(echo "$d - $c")
ここでもこれが必要です。つまり
c=$(echo "$a" | awk ...)
(記号の周りにスペースがないことに注意してください。=
これは通常の割り当てとコマンドを区別することです)。シェルスクリプトの変数代入のスペース)
また、awkスクリプトの数字を見ると、31日の月とそれに対応する372日の年があるように見えます。入力に秒がある場合、awkスクリプトは秒を使用しません。 (+ $6
最後にaが必要ですか?)$a
また、両方のコマンドで$a
およびではありません$b
。
duration=$(echo "$d - $c")
duration
これは、与えられた内容だけを印刷して算術を実行しないため、文字列(5678 - 1234
合計の実際の値を含む)にのみ設定されます。d
c
echo
duration=$((d-c))
これにより減算が可能になります。
答え2
どのシェルを使用しましたか?算術は古い学校では実装されていませんが、/bin/sh
bashではうまく機能します。
~$ a=10000000
~$ b=200
~$ echo $((a-b))
9999800