#!/bin/bash
CURRENT=$(df -h / | grep / | awk '{ print $4}')
THRESHOLD=75
if (( "$CURRENT" >= "$THRESHOLD" )); then
mail -s "CENTOS-6 localhost 10.10.1.238 Disk Space Alert" sss@abc.net << EOF
Your root partition remaining free space is critically low. Used: $CURRENT%
EOF
fi
运行脚本时出现以下错误,语法错误:操作数预期(错误标记为“&gt; = 75”)
答案 0 :(得分:0)
这是因为CURRENT
将包含百分号,因此它不是比较操作的有效操作数。
您可以删除最后一个字符:
CURRENT=${CURRENT%?};
另外,请确保df -h / | grep / | awk '{ print $4}'
正确返回使用率,在大多数系统上您必须使用print $5
。
答案 1 :(得分:0)
试试吧:
CURRENT=$(df -h |awk '{print $4}' |sort -n |tail -n1 |sed 's/%//g')
THRESHOLD=90
if [ $THRESHOLD -gt $CURRENT ]
答案 2 :(得分:0)
有几件事:
grep
,awk
完全有能力做它自己的正则表达式。/
输出中搜索df
,则可能会获得大多数行,因为大多数坐标都在其中的某个位置/
。如果您只想要根安装点,则可以使用<space>/$
。4
是否是正确的字段编号,在我的框中5
。55%
,不会被视为数字。您可以使用gsub
来摆脱它。考虑到这一点,可以使用以下代码段来获取百分比:
df -h | awk '$0 ~ / \/$/ { gsub("%","",$5); print $5 }'
而且,顺便说一下,我不是那个在shell脚本中大肆宣传here-docs的风扇,因为它要么(1)搞砸了我很好的缩进文件;或者(2)让我燃烧半小时,同时我试着记住允许缩进EOF
字符串的各种语法选项: - )
我更喜欢这样的东西:
(
echo Your root partition remaining free space is critically low: Used: ${CURRENT}%
) | mail -s "CENTOS-6 localhost 10.10.1.238 Disk Space Alert" sss@abc.net
特别是,因为这意味着我可以在子shell中放置任意复杂的命令,以便在邮件消息中生成我想要的任何信息(而不仅仅是简单的文本替换)。
所以,底线,我会看到更像的东西:
#!/usr/bin/env bash
# Config section.
LIMIT=75
# Code section.
CURR=$(df -h | awk '$0 ~ / \/$/ { gsub("%","",$5); print $5 }')
if [[ ${CURR} -ge ${LIMIT} ]] ; then
(
echo "Your root partition remaining free space is critically low: Used: ${CURR}%"
) | mail -s "CENTOS-6 localhost 10.10.1.238 Disk Space Alert" sss@abc.net
fi