理解这个CPU利用率脚本

理解这个CPU利用率脚本

我需要理解下面的脚本:

HEADER='CPU    pctUser    pctNice  pctSystem  pctIowait    pctIdle'

HEADERIZE="BEGIN {print \"$HEADER\"}"

PRINTF='{printf "%-3s  %9s  %9s  %9s  %9s  %9s\n", cpu, pctUser, pctNice, pctSystem, pctIowait, pctIdle}'

CMD='sar -P ALL 1 1'

FORMAT='{cpu=$3; pctUser=$4; pctNice=$5; pctSystem=$6; pctIowait=$7; pctIdle=$NF}'

FILTER='/Average|Linux|^$|%/ {next} (NR==1) {next}'


$CMD | tee $TEE_DEST | $AWK "$HEADERIZE $FILTER $FORMAT $PRINTF"  header="$HEADER"

echo "Cmd = [$CMD];  | $AWK '$HEADERIZE $FILTER $FORMAT $PRINTF' header=\"$HEADER\"" >> $TEE_DEST

该脚本实际上用于找出 cpu 利用率(使用 sar)并打印其值。我在理解HEADER,时遇到了麻烦HEADERIZEPRINTF这些东西是如何运作的。

答案1

编写脚本的人只是想让更容易地看到驱动输出外观和脚本功能的所有内容。他们似乎没能让你变得更容易:)。

如果您了解 awk 的工作原理(谷歌搜索或阅读man awk),您会发现它需要一系列图案 { 声明....}​ (这是一种过度简化。)像HEADER和 这样的名称HEADERIZE是 shell 变量,其值在脚本顶部分配,并且其值在后面使用,前面带有“$”。看到那条$AWK "$HEADERIZE线了吗?该脚本将运行 awk(大概在其他地方变量 AWK 被定义为类似awk/usr/bin/awk或类似的东西)。 awk 的参数将以 HEADERIZE 变量的值开始,如第二个非空行中所定义。所以该行实际上会读取(假设AWK变量被定义为awk):

awk "BEGIN {print "$HEADER"}" 

等等。

如果您想了解这一切是如何工作的,请替换echoawk重新定义AWK变量以echo使用类似的东西

export AWK=echo

并重新运行脚本。您将看到命令行,因为它们已传递到awk.

底部有两个命令的原因似乎是,TEE_DEST作为该脚本执行的结果,名称为变量值的输出文件将包含两个条目。一个是从第一个命令开始,其中变量执行命令行的输出CMD将存储在名为的文件中$TEE_DEST,然后传递给awk命令,其输出将显示在终端。然后第二次只需echo将字符串放入脚本Cmd = [$CMD]中,并将该脚本的输出也awk附加到文件中。$TEE_DEST

VARIABLE您可以使用以下命令轻松找到每个命名变量的值

echo $VARIABLE

这允许您通过将脚本的某些部分粘贴到终端窗口中来运行它们并检查内容。我发现这是学习脚本编写的绝佳方法。

如果你想AWK变量的值,当我告诉你用with覆盖值时,你可以像我上面建议的那样做echo

export VARIABLE=new value for the variable

相关内容