Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用conf文件中的参数来使用磁盘?_Bash_Linux Df - Fatal编程技术网

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

Bash 如何使用conf文件中的参数来使用磁盘?,bash,linux-df,Bash,Linux 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 /,90 /run,

我有这样一个磁盘脚本:

#!/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
/,90
/run,99
这是输出(disk.log):

问题:

我需要filesys.conf,因为服务器文件系统总是变化的,conf文件对我来说很容易。但我也需要在filesys.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
/,90
/run,99
如果
/
使用率大于90,
/run
使用率大于99,则写入日志文件


如何执行此操作?

让我们从文件filesys.conf创建一个bash关联数组,格式为
assoc[file system]=threshold
。通过这种方式,我们可以循环它,并与
df-P
的输出进行比较

给定文件:

$ cat filesys.conf
/,90
/dev,25
我们使用(源:)将其存储在数组中:

现在只需处理
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
。在这里,我们检查第二行(第一行是标题,它显然不能从输出中删除(
mandf
没有提到它))以及倒数第二列的值。如果其值大于给定的阈值,则打印所需的输出


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

是否要写入
磁盘.log
或其他日志文件?例如,您可以使用awk进行一些后处理。在那里,您可以比较这些值并决定要执行的操作。写入
磁盘。日志
。我需要写比这个用法更大的东西。
$ for k in "${!assoc[@]}"; do echo "${k} --> ${assoc[$k]}"; done
/dev --> 25
/ --> 90
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