2016-10-01 5 views
0

私の目標は、スクリプト(bash)がステップを進めるたびに、ディスクに十分な領域があるかどうかをチェックすることです。 プリント実行bashのdfから特定の番号を抽出するにはどうしたらいいですか?

Dateisystem  1K-Blöcke Benutzt Verfügbar Verw% Eingehängt auf 
/dev/sdc4  1869858440 1680951776 93900284 95% /mnt/dd 
0 

0は、そのコマンドの結果です。 私のケースでは、私は変数にまたは結果として93900284がほしいだけです。

私はすでにman dfを読んでいます。

+0

を使用することができ、その横にあるチェックボックスをクリックしてください。 –

答えて

1

あなたは出力から、適切なフィールドを抽出するためにawkを使用することができます。

BASH_VAR=`df | awk '/\/dev\/sda4/{print $4;}''` 
ところで
+1

'grep'の後ろに' awk'が続くことはほとんどありません。 'awk'は行とフィールドの両方を選択します。 –

+0

ところで、シェルローカル変数には通常、少なくとも1つの小文字の名前が必要です。 POSIXは、常に大文字の大文字の名前を持つようにシステムやシェルに意味を持つ環境変数を指定します。独自の変数に小文字の名前を使用すると、偶発的に重要なものを上書きすることはありません(環境変数と同じ名前のシェル変数を作成すると、存在するリスクが上書きされます)。 http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html –

2

df --output=avail /path/to/where/you/want/to/write | tail -n 1

:bashは、終了コードがある(この場合0 == successで)道 'を返す' あなたフレーズそれは出力ではなくキャプチャしようとしているようです。その場合、あなたはmight want to read thisです。

+0

GNUの 'df'だけがLinuxカーネルで実行できる唯一のものではない - busyboxもLinux上で動作するすべて;したがって、非GNUツールで動作するオプションを含めることは害ではないかもしれません。 OTOH、あなたがsysfsの関連する数値のソースでOPを指していれば、外部ツールに依存することは全くありません。 –

+0

Hehe、sysfsオプションを見ていましたが、私はそれを知らず、怠け者でした。あなたは正しく私に電話しました:)あなたが見つけた重複として閉じるよう投票しました。 – Wrikken

0

何がやりたいことは、ディスプレイのみ使用可能なディスク領域である場合、あなたはあなたのために働いていた一人として答えをマークする...次のコマンド

df -k /dev/sdc4 | tail -1 | awk '{print $4}' 
+2

'awk'をもっとうまく動作させることでここで' tail'をなくすことができました: 'df -k/dev/sdc4 | awk 'NR == 2 {print $ 4}' ' –

関連する問題