【问题标题】:bash script to check used diskspace用于检查已用磁盘空间的 bash 脚本
【发布时间】:2014-12-28 07:06:05
【问题描述】:

我编写了一个 bash 脚本来检查分区使用的磁盘空间百分比,并在它超过某个限制时警告我。它适用于某些服务器,但不适用于其他服务器

#!/bin/bash 源 /etc/profile # 要检查的设备 开发名称=`df | awk '{print $1}'|tail -n +2` 电子邮件=“我的电子邮件” 阈值=95 对于 $devnames 中的 devname 做 如果 [[ -z "$devname" ]] || [[ "$devname" = "tmpfs" ]];然后 继续 菲 # 让 p=`df -k $devname | grep -v ^文件 | awk '{printf ("%i", 100 - $4*100 / $2); }'` # echo "$devname $p" 如果 [ $p -ge $threshold ] 然后 df -h $devname | mail -s "$devname 空间不足" $email 菲 完毕

这是有问题的服务器上的 df 结果

df 文件系统 1K-blocks Used 可用 Use% Mounted on 根文件系统 20317384 5138584 14154856 27% / /dev/root 20317384 5138584 14154856 27% / devtmpfs 32968916 304 32968612 1% /dev tmpfs 33002348 0 33002348 0% /dev/shm /dev/sda4 1902183556 1617154956 188403296 90% /home /dev/sdb4 1901315252 1675315368 129418612 93% /disk2 /dev/sdc4 1902183556 336514784 1469043468 19% /disk3 /dev/sdd4 1902183556 1348238780 457319472 75% /disk4 /dev/root 20317384 5138584 14154856 27% /var/named/chroot/etc/named /dev/root 20317384 5138584 14154856 27% /var/named/chroot/var/named /dev/root 20317384 5138584 14154856 27% /var/named/chroot/etc/named.conf /dev/root 20317384 5138584 14154856 27% /var/named/chroot/etc/named.rfc1912.zones /dev/root 20317384 5138584 14154856 27% /var/named/chroot/etc/rndc.key /dev/root 20317384 5138584 14154856 27% /var/named/chroot/usr/lib64/bind /dev/root 20317384 5138584 14154856 27% /var/named/chroot/etc/named.iscdlv.key /dev/root 20317384 5138584 14154856 27% /var/named/chroot/etc/named.root.key

这是错误:

/home/util/check_disk_storages.sh df: `rootfs': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) /home/util/check_disk_storages.sh:第 18 行:[:-ge:预期的一元运算符 df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) /home/util/check_disk_storages.sh:第 18 行:[:-ge:预期的一元运算符 df: `devtmpfs': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) /home/util/check_disk_storages.sh:第 18 行:[:-ge:预期的一元运算符 df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”) df: `/dev/root': 没有这样的文件或目录 df:未处理任何文件系统 /home/util/check_disk_storages.sh:第 15 行:让:p=:语法错误:预期操作数(错误标记为“=”)

我该如何解决这个问题?

【问题讨论】:

  • 文件系统名称(df 输出的第一列)不是文件名,您不能假设此类文件存在。如果df 在第一个命令中为您提供了所有需要的百分比,则不清楚您为什么要这样做。

标签: bash


【解决方案1】:

试试这个:只有 2 个小改动。不要在第 15 行使用 let 并在第 18 行对 if 使用 [[ ]]。

#!/bin/bash                                                                                                                                                                                         
source /etc/profile

# Devices to check                                                                                                                                                                                                                                                                                                                             
devnames=`df | awk '{print $1}'|tail -n +2`
email="myemail"
threshold=95
for devname in $devnames
do
   if  [[ -z "$devname" ]] || [[ "$devname" = "tmpfs" ]]; then
       continue
   fi
#                                                                                                                                                                                                   
   p=`df -k $devname | grep -v ^File | awk '{printf ("%i", 100 - $4*100 / $2); }'`
#   echo "$devname $p"                                                                                                                                                                              

  if [[ $p -ge $threshold ]]
  then
    df -h $devname | mail -s "$devname is low on space" $email
  fi
done

【讨论】:

  • 或者试试这个:df -kvh|grep "[0-9]%" | sed "s/[[:space:]][[:space:]]*/ /g" | awk '{ printf "%-50s: %3s\n",$5,$4}' | egrep ": 9[6-9]|100"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 2017-02-16
  • 1970-01-01
  • 2011-12-27
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多