BASH -gt 一元运算符预期错误

BASH -gt unary operator expected error

我已在以前版本的 OSX 上成功使用以下脚本在磁盘卷达到定义的阈值时提醒我。

当 运行 在 Yosemite 上时,它不起作用:

% bash disk-full-alert.sh 
disk: 10766513
df: 10766513: No such file or directory
output:
current:
threshold: 65
_________________

disk-full-alert.sh: line 26: [: -gt: unary operator expected
disk: 129154082
df: 129154082: No such file or directory
output:
current:
threshold: 65
_________________

disk-full-alert.sh: line 26: [: -gt: unary operator expected
disk: 710743471
df: 710743471: No such file or directory
output:
current:
threshold: 65
_________________

disk-full-alert.sh: line 26: [: -gt: unary operator expected

脚本:

#!/bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH
HOSTNAME='server.example.com'
ERECIP='dan@example.com'
# Threshold is percentage full
THRESHOLD=65


get_data() {
  df -l | grep -v Mounted| awk ' { print  } '
}

get_data | while IFS= read -r disk
do
echo disk: $disk
OUTPUT=($(LC_ALL=C df -P ${disk}))
echo output: $OUTPUT
CURRENT=$(echo ${OUTPUT[11]} | sed 's/%//')
echo current:  $CURRENT
echo threshold: $THRESHOLD
echo _________________
echo " "
[ $CURRENT -gt $THRESHOLD ] &&
 (
echo "From: Server Admin <admin@$HOSTNAME>"
echo "To: $ERECIP"
echo "Subject: Warning!! $disk file system is $CURRENT% full on $HOSTNAME"
echo ""
date
echo ""
echo "ALERT!!"
echo " "
echo The $disk file system is $CURRENT% full
echo

) | /usr/sbin/sendmail -it

非常感谢想法或建议!

几乎可以肯定 df 的输出已经改变,导致您的脚本不正确。看起来第 6 列原本是 mount point,但不知何故变成了指标之一(blocksavailableused 等等)。

您需要 运行 df -l 检查第 6 列是否仍然是您需要的正确列。如果不是,请修复脚本或找到 "legacy" 模式下 运行 df 的方法,以便它恢复为旧格式。