user121196
user121196

Reputation: 31060

bash script to check used diskspace

I wrote a bash script to check for partition used diskspace percentage and warn me if it exceeds some limit. It works on some server but not the other

#!/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
#                                                                                                                                                                                                   
   let 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

here's the df result on the problematic server

 df                                      
Filesystem      1K-blocks       Used  Available Use% Mounted on
rootfs           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

here's the error:

 /home/util/check_disk_storages.sh       
df: `rootfs': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
/home/util/check_disk_storages.sh: line 18: [: -ge: unary operator expected
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
/home/util/check_disk_storages.sh: line 18: [: -ge: unary operator expected
df: `devtmpfs': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
/home/util/check_disk_storages.sh: line 18: [: -ge: unary operator expected
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")
df: `/dev/root': No such file or directory
df: no file systems processed
/home/util/check_disk_storages.sh: line 15: let: p=: syntax error: operand expected (error token is "=")

how do I fix this?

Upvotes: 0

Views: 1213

Answers (1)

AKS
AKS

Reputation: 17366

Try this: only 2 small changes. Don't use let in line 15 and use [[ ]] for if in line 18.

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

Upvotes: 1

Related Questions