如何在conf文件中使用参数来使用磁盘?

时间:2016-05-23 07:40:07

标签: bash df

我有一个像这样的磁盘脚本:

#!/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%

问题:

我需要filesys.conf,因为服务器文件系统总是会改变,conf文件对我来说很容易。但我需要在filesys.conf中添加使用参数,如下所示:

/,90
/run,99

如果/使用率大于90,/run使用率大于99,请写入日志文件。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

让我们从80 become 0表单上的文件filesys.conf创建一个bash关联数组。这样,我们可以循环它并与assoc[file system]=threshold的输出进行比较。

鉴于文件:

df -P

我们将它存储在数组中(来源:Bash reading from a file to an associative array):

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

现在价值是:

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

awk

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。在那里,我们检查第二行(第一行是标题,显然无法从输出中删除(awk没有提到它)),在那里,倒数第二列的值。如果它的值大于给定的阈值,我们打印所需的输出。

请注意man df$(NF-1)+0列强制转换为int的技巧:格式Use%转换为13%