linux - [: Unix 中缺少 `]' 错误 | 外壳脚本
问题描述
我在 shell 脚本中遇到 [: missing `]' 错误
memuse=$ free -m
if [ $memuse >80]
then
echo "Attention: memory utilisation is high on $(hostname) at $(date)"
这是我的代码,我得到了类似的错误
[tono@webminal.org ~]$sh ./memory_alert.sh
total used free shared buff/cache available
Mem: 14522 2128 4004 1845 8389 10096
Swap: 0 0 0
./memory_alert.sh: line 2: [: missing `]'
解决方案
嗯,有很多问题。首先,要将某些命令的输出输出到 var,您需要这个
var=$( some_command )
二、输出free -m
为
total used free shared buff/cache available
Mem: 14522 2128 4004 1845 8389 10096
Swap: 0 0 0
怎么能和80比呢?看看您要比较的内容:
"total used free shared buff/cache availableMem: 14522 2128 4004 1845 8389 10096 Swap: 0 0 0" > 80
第三,free -m
以兆字节显示内存信息,我假设您想要百分比,对吗?free
输出中没有这样的指标。但是基于“可用”和“总计”,您可以计算内存使用百分比,然后将其与某个预定义值进行比较。好的,让我们尝试解决这个问题。
#!/bin/bash
memory_alert=80 # this will be an alerting value
memory_total=$( free | sed -n '2p' | awk '{print $2}' ) # get total memory by parsing free output with sed and awk
memory_available=$( free | sed -n '2p' | awk '{print $7}' ) # same with available memory
memory_used=$( echo 100-100*$memory_available/$memory_total | bc ) # calculate memory usage in %
# compare and alert if memory usage more than 80%
(( memory_used > memory_alert )) && echo "Attention: memory utilisation is high on $(hostname) at $(date)"
多亏了 Gordon,更紧凑的变体
#!/bin/bash
memory_alert=80 # this will be an alerting value
memory_used=$( free | awk 'NR==2 {print int(100-100*$7/$2)}' )
(( memory_used > memory_alert )) && echo "Attention: memory utilisation is high on $(hostname) at $(date)"
推荐阅读
- c++ - C++ 头文件/实现文件中的默认和重载构造函数?
- apache-spark - Spark 独立集群在客户端部署模式下无法正常工作
- javascript - ReactJS,axios响应没有正确发送到我的数据集
- mysql - Django:使用未定义关系的预制 mysql 数据库
- html - 防止在找不到图像时旋转 img 标签的 alt 文本
- liquibase - Liquibase modifysql 标记与同一变更集中的 sql 标记不起作用
- python - 无法单击 .png 图像链接
- angular - 将角度 5 更新为 6 序列中没有元素
- java - 将 springboot 2.0.1 项目从 payara 4.1.2 移动到 tomcat 8.5.30
- .net - .NET 中的易失性、内存屏障和缓存一致性?