I’m really new at shell scripting and I’m not sure what is wrong with my code. Basically, my code reads text files for email address, directory location and save it in array.
If file system exceeds disk usage, it will send out notification email and move log files to backup folders. But it doesn’t do anything, can someone please tell me why it doesn’t work?
Thanks in advance
#!/bin/sh
counter=0
logloc=/home/temp/ServerLogs
backup=/home/work/test
## Reads the location of the file systems that needs to be investigated from location.txt
## and save it into an array
while read -r line; do
Unix_Array[${counter}]=$line;
let counter=counter+1;
done < location.txt
## Reads Email recipients and save it into an array
num=0
while read -r line; do
Email_list[${num}]=$line;
let num=num+1;
done < email.txt
## Checking one file system per loop
for ((i=0;i > counter; i++))
do
deletestatus=false;
## usage returns how much the file system is full. Ex. 50% => 50
usage=$(df -P ${Unix_Array[$i]} | grep ${Unix_Array[$i]} | awk '{ print $5}' | sed 's/%//g')
#if usage is greater than 80%, send email
if [$usage -gt 80];
then
for ((j=0;j > num; j++))
do
echo ${Unix_Array[$i]} " is " $usage "% full, the logs that are 7 days older has been removed" | mail - s "Log notification" ${Email_list[$j]}
done
deletestatus=true;
elif [$usage -gt 50];
then
## if free space is greater 50 and less than 80, it will not send email
deletestatus=true;
else
## Safety net
deletestatus=false;
fi
if [$deletestatus];
then
##Moving Files that are older than 7 days
$(find /home/songja/ServerLogs -type f -name 'SystemOut_*' -mtime +2 -exec mv {} /home/songja/test \;)
## Deleting files that are older than 7 days
$(find . $logloc . - name 'SystemOut_*' -mtime +2 -delete)
fi
done
That’s never going to loop.
i<counterhas a better chance. Same for the otherforloop.Aside from that, the tests inside the loop need spaces.