1

シェルスクリプトの実行時間を秒単位で計りたい。

私の実装:

#!/bin/sh
START=$(date +%s)
echo $START
.
.
bla bla bla
.
.
.
END=$(date +%s)
echo $END
DIFF=($END - $START)
echo  "Time difference is "$DIFF

これは、違いではなく、終了時間を示しています。マイナスが機能しない理由は推測できません。

4

2 に答える 2

2

あなたが使用していると仮定しますbash

シェルで算術演算を行うには、二重括弧を使用する必要があります。

((DIFF = START - END))
#or
DIFF=$((START - END))

二重括弧内の変数から読み取るためにドル記号を使用する必要はないことに注意してください。

于 2012-12-10T21:11:51.770 に答える
1

算術演算にはドル二重括弧が必要です。

DIFF=$(($END - $START))

次のように:

#!/bin/bash
START=$(date +%s)
echo $START
sleep 2
END=$(date +%s)
echo $END
DIFF=$(($END - $START))
echo  "Time difference is" $DIFF

Bashリファレンス マニュアルには次のように記載されています。

3.5.5 算術展開

算術展開により、算術式の評価と結果の置換が可能になります。算術展開の形式は次のとおりです。

$(( expression ))

式は二重引用符内にあるかのように扱われますが、括弧内の二重引用符は特別に扱われません。式内のすべてのトークンは、パラメーター展開、コマンド置換、および引用符の削除を受けます。算術展開は入れ子にすることができます。

も参照してください

3.2.4.2 条件付き構造

((…))

(( expression ))

算術式は、以下で説明する規則に従って評価されます (「シェル演算」を参照)。式の値がゼロ以外の場合、戻りステータスは 0 です。それ以外の場合、戻りステータスは 1 です。これは、

let "expression"

let ビルトインの完全な説明については、Bash Builtins を参照してください。

于 2012-12-10T21:11:16.157 に答える