2017-02-21 12 views
0

ここでは多くのヘルプトピックを読んでいますが、私の特定の質問や問題については答えが見つかりませんでした。bashスクリプトの単純な数学計算

私は、Red Hat 7(それは重要ではないということはなく...)

if [[ $(stat -c %s) -gt 1024 ]]; 
    then 
    echo "   $(scale=1;stat -c %s log.txt/1024) KiloBytes" 
    else 
    echo "   $(stat -c %s log.txt) Bytes" 
    fi 

でこのbashのコードを持っており、それは、このエラーがスローされます:私はしたい。この小さなチェックで

stat: missing operand Try 'stat --help' for more information. 0 Bytes

をlog.txtが1024バイトより大きいかどうかを確認し、trueの場合は合計バイトサイズを1024で割り、出力をXXXX KiloBytesとしてエコーします。しかし、私は何が欠けている。 Shellcheck.comはすべてが大丈夫だと言います...

誰もがこの問題について私を助けることができますか?

+0

'stat'に何をしようとしていますか?あなたは何かを統計するように言っていないので、それについて不平を言っている。あなたは '$(stat -c%s log.txt)'を意味しましたか? –

+0

はい、私は '$(stat -c%s log.txt)'を意味しました。 – floppy

+0

ところで、 'stat'をもう一度実行するのではなく、結果を変数に保存してから、その値をテストし、その変数の –

答えて

1

ファイル名がありません。

if [[ $(stat -c %s log.txt) -gt 1024 ]]; 
#   look: ^^^^^^^ 

を最初の行にすることをお勧めします。指示とstat --helpを入力として、そうした場合、それは正しい使い方が

Usage: stat [OPTION]... FILE... 
Display file or file system status. 

-c %sがOPTIONSであり、あなたが最初の行で指定されたファイルを持っていないであることを示します。

+0

私はそれを監督したと信じられない、すみません。あなたの指導と助けをありがとう。それは固定されています。 – floppy

0

浮動小数点演算に使用されるプログラムであるbcへのコールが欠落しているようです。 scale=1は通常bcへの入力の一部です:

# No 
echo "   $(scale=1;stat -c %s log.txt/1024) KiloBytes" 
# Yes - broken down into steps for easy reading 
size=$(stat -c %s log.txt) 
result=$(echo "scale=1; $size/1024" | bc) 
echo "   $result KiloBytes" 
0

おそらく、あなたはあなたのスクリプトのサイズを減らしに興味があると思います:

stat -c %s log.txt | awk '{ print ($0 > 1024 ? $0/1024 " Kilobytes" : $0 " bytes") }' 

はAWKと印刷のいずれかのバイトを使用してstatの出力を解析しますまたはキロバイトのサイズに依存します。