该题实际需求是获取对应列值进行计算,期间需要了解ps命令结果中每一列代表的含义

#!/usr/bin/env bash
function test() {
    local sum=0
    local arr=()
    while read line; do
        arr=(${line})
        sum=$((${sum} + ${arr[5]}))
    done < nowcoder.txt
    echo ${sum}
}
test

  • 只能用于整型,计算结果只有整数,小数点后直接丢弃
    • expr 1 + 2 数字和符号之间必须有空格!
    • $[1/2] 计算结果只有整数,小数点后直接丢弃
    • $(()) 计算结果只有整数,小数点后直接丢弃, 幂运算 $(( 2 ** 3 )) 前式即:2的3次幂
    • let y=2+3 / let x=y+2 / let x=${y}+2 计算结果只有整数,小数点后直接丢弃

  • 可以浮点运算的工具
    • bc计算器 echo " 1/3" | bc 结果为0 必须在算术式前先指定保留位数 scale=2;(保留俩位,用分号结束,在接算术式)
      如: echo "scale=2; 1/3" | bc
      以上bc结果是.33 少了个位上的0,因为bc会在小数点前为结果为0时,省略; 且不管保留几位小数,不会自动四舍五入
    • awk 'BEGIN {print 1 / 3}' 不指定格式,最多保留6位小数,不会自动四舍五入,只有小数点后的位数大于4时会自动进行进位
      使用printf函数指定保留的小数位数
      awk 'BEGIN { printf "%0.2f\n" ,1/2}' / awk 'BEGIN { printf("%0.2f\n", 1/2) }'