bc 命令后出现脚本错误

bc 命令后出现脚本错误

我正在尝试执行如下所示的脚本:

#!/bin/bash
USED=`free -m | more | grep -v total | head -1 | cut -d':' -f2 | cut -d' ' -f18`
CACHE=`free -m | more | grep -v Swap | tail -1 | cut -d':' -f2 | cut -d' ' -f9`
TOTAL=`free -m | more | grep -v total | head -1 | cut -d':' -f2 | cut -d' ' -f11`
echo "scale=2 ; ((($USED - $CACHE) /$TOTAL) *100)" | bc

但我总是收到以下错误:

(standard_in) 1: parse error

答案1

如果删除 bc 的管道| bc,然后运行脚本,它将输出:

scale=2 ; (((5538 - ) / 5969) * 100)

可以看到$CACHE变量为空,导致bc语法错误。

你可以试试:

CACHE=$(free -m | more | grep -v Swap | tail -1 | cut -d':' -f2 | awk '{print $1}')

笔记

  • 用于awk解析输出比在这种情况下更好cut
  • 你应该试试$(...)用于命令替换。

答案2

#!/bin/bash
USED=**0**
free -m | more | grep -v total | head -1 | cut -d':' -f2 | cut -d' ' -f18

CACHE=**0**
free -m | more | grep -v Swap | tail -1 | cut -d':' -f2 | cut -d' ' -f9
TOTAL=**0**
free -m | more | grep -v total | head -1 | cut -d':' -f2 | cut -d' ' -f11
echo "scale=2 ; ((($USED - $CACHE) /$TOTAL) *100)" | bc

相关内容