【发布时间】:2014-05-30 18:47:12
【问题描述】:
我试图制作一个小脚本来检查备份驱动器是否正常及其磁盘使用详细信息,并将其添加到 nagios 作为服务器的主动检查。一旦我写了一个,我有一些未知的错误,我不想更正。
脚本是:
#!/bin/sh
BACKUP_DRIVE='/backup'
if [[ "$( grep $BACKUP_DRIVE /etc/fstab | awk '{print $2}')" -ne "0" ]]; then
if [[ "$( df -h | grep $BACKUP_DRIVE | awk '{print $6}')" -ne "0" ]]; then
if [[ "$( df -h|grep backup|awk '{print $5}' | cut -d "%" -f1)" -ge "95" ]]; then
echo "CRITICAL: Backup Drive usage exceeded 95%"
fi
else
echo "CRITICAL: Backup Drive not mounted"
fi
else
echo "CRITICAL: Backup Drive not added in fstab"
fi
错误是:
# sh /usr/local/src/backupcheck.sh
/usr/local/src/backupcheck.sh: line 6: [[: /backup: syntax error: operand expected (error token is "/backup")
CRITICAL: Backup Drive not added in fstab
它在第一个 if 条件本身时出错,而不是进入内部 if 条件。
在提到变量 $BACKUP_DRIVE 的地方是否需要进行任何更正?请帮忙,因为我是 bash 脚本的初学者。
【问题讨论】:
-
你为什么使用 /bin/sh 而不是 /bin/bash
-
重复的
grep | awk、df | awk、... | awk | cut和此处的类似用法效率低下、难以阅读且通常很愚蠢。使用 shell 的read内置函数来解析这些内容,一次一整行会更简单,更易读。 -
...另外,将
[[ ]]与-ge结合起来也很愚蠢——任何支持[[ ]]的shell 也将支持(( )),其中更易读的@987654331 @ 可用于数值比较。