2016-05-23 7 views
2

は、私はこのようなディスクスクリプトを持っている:ディスク使用のためのconfファイルのパラメータの使い方は?

#!/bin/bash 

filesys=(
/
) 
[ -f "$(pwd)/filesys.conf" ] && filesys=($(<$(pwd)/filesys.conf)) 

date=$(date +"%d\/%m\/%Y") 

df -P "${filesys[@]}" | 
sed -ne 's/^.* \([0-9]\+\)% \(.*\)$/'$date', \2, \1%/p' > disk.log 

私は仕事のためfilesys.confを持っているファイルシステム:

/ 
/run 

そして、これは(disk.log)出力されます:

23/05/2016, /, 78% 
23/05/2016, /run, 0% 

質問:

サーバファイルシステム常に変更、confファイルは私のために簡単です。しかし、私は、あまりにもこのようfilesys.confで使用量パラメータを追加する必要があります。99より/run用法大きい、90より/用法大きい場合

/,90 
/run,99 

、ログファイルに書き込みます。

どうすればいいですか?

+0

'disk.log'などのログファイルに書き込みしますか?いくつかの後処理はawkなどで行うことができます。ここで値を比較して何をすべきかを決めることができます。 – fedorqui

+0

'disk.log'に書き込みます。私はこの使用法よりも大きなものを書く必要があります。 – phe

答えて

2

assoc[file system]=thresholdの形式でfilesys.confファイルからbash連想配列を作成しましょう。このようにしてループして、df -Pの出力と比較することができます。

$ cat filesys.conf 
/,90 
/dev,25 

我々は(ソース:Bash reading from a file to an associative array):を配列に格納します。ファイルを考えると

declare -A assoc 
while IFS=, read -r -a array; 
do 
    assoc[${array[0]}]=${array[1]} 
done < filesys.conf 

は、だから今値は次のとおりです。今

$ for k in "${!assoc[@]}"; do echo "${k} --> ${assoc[$k]}"; done 
/dev --> 25 
/--> 90 

それdfの出力を処理するだけの問題です。たとえば、awkawk

mydate=$(date "+%d/%m/%Y") 
for k in "${!assoc[@]}" 
do 
    df -P "${k}" | awk 'NR==2 && $(NF-1)+0 > limit {print date, fs, $(NF-1)}' OFS=, fs="$k" date=mydate limit="${assoc[$k]}" 
done >> disk.log 

このパイプdf。そこでは、2番目の行を確認します(最初のものはヘッダーですが、出力から削除できないようです)(man dfはそれを言及していません))、そこでは最後から2番目の列の値です。その値が指定されたしきい値より大きい場合は、目的の出力を出力します。

Use%列をintにキャストするには、$(NF-1)+0というトリックに注意してください。13%13に変換されます。

関連する問題