语法错误:操作数预期(错误标记为“> = 75”)

时间:2013-09-26 09:48:36

标签: shell

#!/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”)

3 个答案:

答案 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)

有几件事:

  • 你根本不需要grepawk完全有能力做它自己的正则表达式。
  • 如果您在/输出中搜索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