0
#!/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

运行脚本时出现以下错误,语法错误:操作数预期(错误标记为 ">= 75")

4

3 回答 3

0

这是因为CURRENT将包含一个百分号,所以它不会是比较操作的有效操作数。

您可以像这样删除最后一个字符:

CURRENT=${CURRENT%?};

还要确保df -h / | grep / | awk '{ print $4}'在您必须使用的大多数系统上正确返回使用率print $5

于 2013-09-26T10:06:14.477 回答
0

试试看嘛:

CURRENT=$(df -h |awk '{print $4}' |sort -n |tail -n1 |sed 's/%//g')
THRESHOLD=90

if [ $THRESHOLD -gt $CURRENT ]
于 2017-10-18T07:17:09.343 回答
0

有几件事:

  • 你根本不需要grepawk完全有能力做它自己的正则表达式的东西。
  • /如果您在输出中搜索df,您可能会得到大多数行,因为大多数坐骑中都有/某个位置。如果你只想要根挂载点,你可以使用<space>/$.
  • 检查这4是正确的字段编号,在我的盒子上是5.
  • 在任何情况下,该字段的形式55%都不会被视为数字。你可以用gsub它来摆脱它。

考虑到这一点,以下代码段可用于获取百分比:

df -h | awk '$0 ~ / \/$/ { gsub("%","",$5); print $5 }'

而且,顺便说一句,我不是shell 脚本中的 here-docs 的忠实粉丝,因为它要么(1)搞砸了我很好的缩进文件;EOF或(2)让我在尝试记住允许缩进字符串的各种语法选项时花费半个小时:-)

我更喜欢这样的东西:

(
    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
于 2017-10-18T08:41:59.067 回答