単純なスクリプトで生成された0バイトファイル

単純なスクリプトで生成された0バイトファイル

次のスクリプトがあります。

#!/bin/bash
df -k | tr -s " " "," | awk 'BEGIN {FS=","} {print $1,$5}'|sed 1d > file1.txt
while read partition percentUsed
do
if [ $percentUsed > 75 ]
then
echo Partition: ${partition} space is ${percentUsed}
else
echo Pration: $partition: OK!!
fi
done < file1.txt

スクリプトは正しく実行されていますが、75という0バイトのファイルが生成されます。なぜこれが起こるのか知っていますか?

$ sh diskUsed.sh
Partition: C:/Users/Public/Documents/CYGWIN/bin space is 75%
Partition: C:/Users/Public/Documents/CYGWIN/lib space is 75%
Partition: C:/Users/Public/Documents/CYGWIN space is 75%
Partition: C: space is 75%
Partition: H: space is 91%


$ ls -lrt
total 2
-rwxrwxrwx 1 diwvibh Domain Users 284 Nov 21 04:17 diskUsed.sh
-rw-r--r-- 1 diwvibh Domain Users 133 Nov 21 04:29 file1.txt
-rw-r--r-- 1 diwvibh Domain Users   0 Nov 21 04:29 75

ベストアンサー1

 if [ $percentUsed > 75 ]

使用する必要があります-gt数値比較のための演算子です。現在実行中の作業は、コマンドの(空の)出力を保存することです。[ $%使用済み ]「75」というファイルとして保存します。

スクリプトは正しく実行されていますが、75という0バイトのファイルが生成されます。なぜこれが起こるのか知っていますか?

正しく実行されません。これ」[ $%使用済み ]文字列が空でない場合、このコマンドはtrueを返します。これは常にこのスクリプトの場合です。いつもif 文の最初の分岐を取得します。

なぜなら$% 使用済み整数ではありません(末尾に「%」があります)。使用できます。${パーセント使用%[%]}@val0x00ffが提案したように、変数から末尾の「%」を削除するか、awkに0を追加してください。

Bashスクリプトに関する一般的な注意:

  1. 同意する[[表現]]の代わりに[表現]より強力で、空の文字列をよりよく処理するためです。
  2. 特別な理由がない限り、文字列の周りに二重引用符を使用してください(改行文字の削除など)。
  3. 中かっこを追加: $var の代わりに ${var} - 読み込み時に混乱を取り除き、変数がテキストに隣接するようにします。例:echo "残額: ${kb}KB"
  4. 通常、可能であれば一時ファイルを生成しないでください。代わりに、ステップ間にパイプを使用してください。
  5. 次のツールを使用する場合アッ)次に、この機能を使用してコードをよりきれいにし、他の人のコードを読みやすくする方法を学びます。
  6. コードを正しくインデントしてください(実際の生活ではできますが、投稿ではできないかもしれません)。
  7. 感嘆符(「!」)を入力するには、次のようにします。セット+Hだから彼らはあなたを台無しにしないでしょうインタラクティブBashを介してレコードを挿入します。

以下はスクリプトの作業バージョンです。

#!/bin/bash +H
df -k | awk '(FNR>1){print $1,$5+0}' | while read partition percentUsed
do
    if [[ $percentUsed -gt 75 ]]
    then
        echo "Partition: ${partition} space is ${percentUsed}% used"
    else
        echo "Partition: ${partition}: OK!!"
    fi
done

Nit pick:80%を使用すると、「echo」行に「Partition /home space is 80」が出力され、多くの人が「space」を「」と読み込みます。無料スペース'、つまり20%です。

おすすめ記事