[英]I want to use a shell script to check the disk space and output the specified value, but it didn't work
我正在学习 shell,我想使用 shell 脚本检查磁盘空间和 output 值,但它不起作用。
#!/bin/bash
result=""
ALERT=40
OUT_FLAG() {
local check_value=$1
local result_value=$2
if [ ${check_value} -eq 0 ];then
echo "$result|${result_value}:0"
else
echo "$result|${result_value}:1"
fi
}
Check_disk() {
local disk_result=0
df -Pl | grep -vE "^Filesystem|tmpfs|cdrom" | awk '{print $5 " " $6}'|while read output;
do
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1)
if [ $usep -ge $ALERT ]; then
disk_result=1
fi
done
OUT_FLAG ${disk_result} "disk"
}
Check_disk
我想要它到 output |disk:1 但它是 |disk:0。 想知道这样做是否是一种好习惯以及最好的方法是什么?
df -Pl |... | while
df -Pl |... | while
管道作为子shell运行,并且disk_result
仅在子shell中设置。 在done
之后, disk_result
保留了它在子外壳之外的值。 在某些 shell 中这是不正确的,但在bash
中就是这种情况。 最简单的解决方案是扩展 scope,如下所示:
df -Pl | ... | { while read output;
do ...; done;
OUT_FLAG "${disk_result}" disk;
}
通过将对 OUT_FLAG 的调用(注意OUT_FLAG
是一个糟糕的函数名称)放在大括号内,它成为子外壳的一部分,因此disk_result
被定义为您所期望的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.