刚开始学习linuxsbashshell编程,我只是不知道我是否理解正确。查看下面的示例程序:

#!/bin/bash
n=1
sumRSS=1000
sumSZ=2000

echo Before sumRSS=$sumRSS sumSZ=$sumSZ
ps -ly | while
read c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
do
    if (( n>1 ))
    then
        echo n=$n rss=$sumRSS sz=$sumSZ
        ((sumRSS = sumRSS +  c8))
        ((sumSZ = sumSZ + c9))

    fi
    ((n++))
done

echo Sum of RSS = $sumRSS
echo Sum of SZ = $sumSZ

输出:
Before sumRSS=1000 sumSZ=2000
n=2 rss=1000 sz=2000
n=3 rss=2368 sz=29118
n=4 rss=3792 sz=55644
n=5 rss=4780 sz=82679
Sum of RSS = 1000
Sum of SZ = 2000

我不知道为什么总数还是回到RSS=1000和SZ=2000。实际上我期望RSS=4780和SZ=82679。
我知道我错过了一些基本的东西。我通过写简单的脚本来学习bash。

最佳答案

你应该像@linuxfan建议的那样避开管道。您可以将代码更改为:

while read c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
do
    ...
done < <(ps -ly)

这样你的变量保持在相同的范围内。

08-07 08:39