我尝试了几件事,但我不理解为什么'第10行'在第9行'之前执行。
实际代码:
df -PH | grep -vE '^Filesystem|tmpfs|cdrom|loop' | awk '{ print $5 " " $1 " " $6}' | while read output;
do
proc=$(echo $output | awk '{ print $1}' | cut -d'%' -f1)
partition=$(echo $output | awk '{ print $2 }' )
mountp=$(echo $output | awk '{ print $3 }' )
ohostn=$(checkOtherHostname)
if [ $proc -ge $THRESHOLD_HD ]; then
printf "%20s [%6s] [%20s] %4s%% \"%s\"\n" "$(hostname)" "$ohostn" "$mountp" "$proc" "$partition"
sudo du -sh $mountp/*
fi
done
结果位于下面的OUTPUT中。
然后我通过在第一个if语句下放入第二个if语句并在其中移动sudo命令并且输出仍然相同来尝试不同的方式!
df -PH | grep -vE '^Filesystem|tmpfs|cdrom|loop' | awk '{ print $5 " " $1 " " $6}' | while read output;
do
proc=$(echo $output | awk '{ print $1}' | cut -d'%' -f1)
partition=$(echo $output | awk '{ print $2 }' )
mountp=$(echo $output | awk '{ print $3 }' )
ohostn=$(checkOtherHostname)
if [ $proc -ge $THRESHOLD_HD ]; then
printf "%20s [%6s] [%20s] %4s%% \"%s\"\n" "$(hostname)" "$ohostn" "$mountp" "$proc" "$partition"
fi
if [ $proc -ge $THRESHOLD_HD ]; then
sudo du -sh $mountp/*
fi
done
输出:
1.1T /data/svn_repo_01/repos
16K /data/svn_repo_01/lost+found
2.7G /data/svn_repo_01/csvn
4.0K /data/svn_repo_01/migration
4.0K /data/svn_repo_01/tmp
vmappp21 [svntoy] [ /data/svn_repo_01] 70% "/dev/sde1"
答案 0 :(得分:1)
简短回答:不应该发生。
我无法在我的环境中重现您的问题,但您没有向我们提供相关信息:
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
checkOtherHostname
做什么?exec >
)关于效果
与您的问题无关,但我注意到您使用了以下命令:
df
行3次执行)df
行执行一次)由于它是一个没有特殊性能需求的小脚本,这应该不是问题,但如果您打算在更大的脚本中使用相同的方法或处理许多记录。这可能是一个问题。
所以我使用最少量的命令制作了这个简化版本的脚本:
hostname="$(hostname)"
ohostn="$(checkOtherHostname)"
df -PH | while read partition size used avail proc mountp; do
if ! [[ "$partition$mountp" =~ "Filesystem|tmpfs|cdrom|loop" ]] && [ ${proc%%%} -ge $THRESHOLD_HD ]; then
printf "%20s [%6s] [%20s] %4s \"%s\"\n" "$hostname" "$ohostn" "$mountp" "$proc" "$partition"
sudo du -sh $mountp/*
fi
done