結果を返すために、特定の値に基づいて2つのファイルの内容を確認する次のコードスニペットがあります。
if [[ "$(/bin/cat ${TMP_FILE})" != "" ]]
then
if [[ $(cat ${TMP_FILE}) -gt ${TEST1} ]]
then
res=503
sec=101
elif [[ $(cat ${TMP_FILE2}) -gt ${TEST2} ]]
then
res=503
sec=102
else
res=200
sec=103
fi
else
res=503
sec=999
fi
デフォルトで$TMP_FILE
は空の場合はすぐにジャンプしますsec=999
。
$TMP_FILE2
しかし、空であれば最後までジャンプする結果も得られます。どうしたのか、2部か3部( sec=102
or sec=103
)で失敗すると予想したから。
ベストアンサー1
ファイルを3回読みました(!)。もちろん、オペレーティングシステムはファイルキャッシュを提供し、状況を悪化させる可能性があります(最悪の場合:読み取り間でファイルが変更されると、スクリプトは3つの異なる内容を読み取ります)。ファイル内容を分岐せずに一度読んだcat
後、その内容に対してシェルテストを使用する方が賢明です。
#!/usr/bin/env bash
# look ma no cat!
TMP_FILE_CONTENTS=$(<"$1")
if [[ -n "$TMP_FILE_CONTENTS" ]]; then
if [[ "$TMP_FILE_CONTENTS" -gt 42 ]]; then
echo more
else
echo less
fi
else
echo empty
fi
私にとって、これは次のようなものを生成します
$ :> empty
$ echo 5 > small
$ echo 999999 > big
$ ./reed empty
empty
$ ./reed small
less
$ ./reed big
more
$