我试图在多个主机上运行此脚本,但它们没有安装BC。
我听说你可以用“awk”开头{print…}'的字眼,但我无法让它工作。

#!/bin/bash

nproc=$(nproc);

load=$(uptime | awk '{print $12}');


load_diff=$(echo "$load - $nproc" | bc)

cores=$(echo "$nproc * .25" | bc)

if (( $(echo "$load_diff > $cores" | bc --mathlib) ));

        then

                top -c -n 2 -b > /tmp/top.txt

fi

最佳答案

linux或unix操作系统提供bcexpr进行算术计算。
因此,如果未安装bc,则可以利用expr进行计算。
您可以使用下面的命令在expr中执行相同的任务:
发件人:

load_diff=$(echo "$load - $nproc" | bc)

致:
load_diff=$(expr $load - $nproc) or load_diff=`expr $load - $nproc`

然而,expr的一个限制是它不处理小数。为此,可以使用下面的awk命令来处理小数。
cores=$(awk 'BEGIN{ print '$nproc' * '.25'}') and load_diff=$(awk 'BEGIN{print '$load' - '$nproc' }')

10-06 03:23