Bash 脚本中存在一种奇怪的行为。尝试在两个不同的系统中运行以下行。
脚本:
cpuIdle=$(mpstat 5 1 | grep Average | awk '{ print $12 }')
cpuUsage=$(bc <<< "100.0-$cpuIdle")
以下是机器的详细信息。
系统1:
- Ubuntu 14.04.04 LTS
Linux 4.2.0-36-generic #42~14.04.1-Ubuntu SMP Fri May 13 17:27:22 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
awk --version
=GNU Awk 4.0.1
bash --version
=GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
系统2:
- Ubuntu 16.04.04 LTS
Linux 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
awk --version
=GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
bash --version
=GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)
脚本在 System-1 上运行顺畅,但在系统-2在跑步的时候bc
:
(standard_in) 1: syntax error
我可以确认在两个系统中处理器空闲变量设置正确(剧本第一行t)。
我还可以确认,当我设置时,bc 在两个系统中都可以正常工作处理器空闲手动变量(例如 cpuIdle=97.3)。
无法确定这是错误还是我的错误。有什么建议或想法吗?
答案1
它是逗号。
$ cpuIdle=$(mpstat 5 1 | grep Average | awk '{ print $12 }')
$ echo $cpuIdle
99,25
->
$ cpuUsage=$(bc <<< "100.0-95,25")
(standard_in) 1: syntax error
和
$ cpuUsage=$(bc <<< "100.0-95.25")
$ echo $cpuUsage
4.75
因此这可能是国际化问题(在荷兰我们用逗号表示小数)。我想说:错误,有人忘记将逗号作为可能的小数符号。
切换到美国注释它就会再次起作用。