为子壳中的全局变量增加价值不起作用



我正在尝试获取机器的总磁盘使用情况。以下是脚本代码:

#!/bin/sh
totalUsage=0
diskUse(){
    df -H | grep -vE '^Filesystem|cdrom' | awk '{ print $5 " " $1 }' | while read output;
    do
       diskUsage=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
       totalUsage=$((totalUsage+diskUsage))
    done
}
diskUse
echo $totalUsage

虽然totalUsage是一个全局变量,但我试图将单独的磁盘用法概括为 totalUsage的行:

totalUsage=$((totalUsage+diskUsage))

dodone之间的totalUsage的回声显示正确的值,但是,当我在呼叫diskUse后尝试回声时,它会静止打印0

您能帮我吗,这里有什么问题?

子壳中的变量totalUsage不会改变父壳中的值。由于您标记了bash,因此可以在此处使用 string 修改循环:

#!/bin/bash
totalUsage=0
diskUse(){
    while read output;
    do
       diskUsage=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
       totalUsage=$((totalUsage+diskUsage))
    done <<<"$(df -H | grep -vE '^Filesystem|cdrom' | awk '{ print $5 " " $1 }')"
}
diskUse
echo $totalUsage

我建议插入

shopt -s lastpipe

作为新线

#!/bin/bash

来自man bash

lastpipe:如果设置,而作业控制不活动,则壳运行的最后一个管道的命令未在当前Shell环境中执行的管道。

最新更新