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