繁体   English   中英

我想用一个 shell 脚本来检查磁盘空间和 output 指定的值,但是没有用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM