我正在尝试获取机器的总磁盘使用量。以下是脚本代码:
#!/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))
totalUsage
和do
之间的done
回显显示正确的值,
但是当我在通话diskUse
后尝试回复它时,它仍会打印0
你能帮帮我吗,这里有什么问题?
答案 0 :(得分:2)
子shell中的变量map
不会更改父shell中的值。
由于您标记了bash,因此可以使用 here string 来修改循环:
totalUsage
答案 1 :(得分:1)
我建议插入
shopt -s lastpipe
后面的新行
#!/bin/bash
来自man bash
:
lastpipe
:如果设置,并且作业控制未激活,则shell将运行当前shell环境中未在后台执行的管道的最后一个命令。