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
,但不知何故变成了指标之一(blocks
、available
、used
等等)。
您需要 运行 df -l
检查第 6 列是否仍然是您需要的正确列。如果不是,请修复脚本或找到 "legacy" 模式下 运行 df
的方法,以便它恢复为旧格式。
我已在以前版本的 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
,但不知何故变成了指标之一(blocks
、available
、used
等等)。
您需要 运行 df -l
检查第 6 列是否仍然是您需要的正确列。如果不是,请修复脚本或找到 "legacy" 模式下 运行 df
的方法,以便它恢复为旧格式。