我正在尝试获取机器的总磁盘使用情况。以下是脚本代码:
#!/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))
do
和done
之间的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环境中执行的管道。