我正在尝试执行如下所示的脚本:
#!/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