在子shell中向全局变量添加值不起作用

时间:2016-11-25 09:29:38

标签: bash shell

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

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

totalUsagedo之间的done回显显示正确的值, 但是当我在通话diskUse后尝试回复它时,它仍会打印0

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

2 个答案:

答案 0 :(得分:2)

子shell中的变量map不会更改父shell中的值。 由于您标记了bash,因此可以使用 here string 来修改循环:

totalUsage

答案 1 :(得分:1)

我建议插入

shopt -s lastpipe

后面的新行

#!/bin/bash

来自man bash

  

lastpipe:如果设置,并且作业控制未激活,则shell将运行当前shell环境中未在后台执行的管道的最后一个命令。