Script Festplattengröße überprüfen

Hallo,
ich möchte in einem Script abfragen, ob mehr der Festplatteninhalt größer ist als ein festgelegtes Limit.

ich habe mir dazu schon etwas überlegt, leider klappt es noch nicht ganz.

Code:
limitdf=22048000;
freedf=`df | grep /dev | cut -d ' ' -f 21-21`;
echo "Freier Speicherplatz: $freedf > $limitdf";
if [ $freedf > $limitdf ]; then
  echo "erstelle Backup";
else
  echo "zu wenig Platz";
fi
Habt ihr nen Tip?
 
Da df scheinbar keine tabs sondern leerzeichen benutzt, musste ich ein bisschen spielen, aber bei mir gibt:

Code:
df | grep /dev/sda6 | cut -d ' ' -f 19

die Anzahl der verfügbaren Blöcke aus.
 
den speicherplatz zu bekommen das klappt auch.

mein code ist:
Code:
echo Groesse testen
freedf=`df | grep /dev | cut -d ' ' -f 21`;

echo Speicher: $freedf;

if [ $freedf > 102222222 ]; then
 echo mehr
fi;

und das ergebnis ist:
Code:
Speicher: 1726652
mehr
obwohl dies weniger sein sollte, da
Code:
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/vzfs              5242880   3516228   1726652  68% /

>> sprich die if abfrage greift nicht richtig und ich weiß nicht warum :(
 
hallo,

bin ein neuling in UNIX und Shell-Scripten. Muss auch eine Abfrage starten ob ich noch genügend Speicherplatz für ein Backup zur Verfügung habe.

könnte mir einer kurz erklären was ab "cut" die Bezeichnungen bedeuten, weil ich im netz nichts gefunden habe.

Code:
freedf=`df | grep /dev | cut -d ' ' -f 21`;

zudem arbeite ich auf einer Solaris Maschine und habe mein den Code von oben übernommen und minimal geändert:

Code:
 #! /bin/sh
# Speicherabfrage testen ob noch genuegend Speicher zur Verfuegung steht
# falls ja, dann erstelle Ordner, falls nein -> Fehlermeldung

LOG_SCRIPT=speichertest

minimumdf=71267384
verfuegbardf='df | grep /test | cut -d '' -f 21'

echo "Speicherabfrage: $verfuegbardf" >> $LOG_SCRIPT
if [ $verfuegbardf > $minimumdf ]
then
      mkdir test
echo "genuegend Speicherplatz verfuegbar" >> $LOG_SCRIPT
else
echo "Speicherplatz zu wenig" >> $LOG_SCRIPT
fi
echo "ENDE"

wenn ich mein Script ausführe bekomme ich jedoch folgende Fehlermeldung: "unknown operator | ".
Warum wird dieser Operator nicht erkannt?
Benutze den vi-Editor.

mfg

danke im Voraus
 
oder um verwechslungen vorzubeugen:

Code:
verfuegbardf=$(df | grep /test | cut -d '' -f 21)

finde ich persönlich etwas übersichtlicher in größeren scripten.
 
ja das problem war, das ich apostroph benutzt habe und nicht backticks.

eine hilfe könnte ich eventeuell von euch noch gebrauchen.

Code:
Filesystem             size     used    avail   capacity  Mounted on 
/dev                    400 G    300 G  100 G      80%      /test

wenn ich ein Backup mache, dann gehe ich davon aus das ich um die 50 GB an Speicherplatz brauche.
Möchte daher eine if-abfrage machen, so dass wenn ich mehr als 50 GB Speicherpaltz (also hier 100 GB) habe, das mein Backup durchgeführt werden darf, wenn nicht dann halt nicht.

daher mein code :

Code:
#! /bin/sh
# Speicherabfrage testen ob noch genuegend Speicher zur Verfuegung steht
# falls ja, dann erstelle Ordner, falls nein -> Fehlermeldung

LOG_SCRIPT=speichertest

minimumdf=52428800
verfuegbardf=`df | grep /test | cut -d '' -f 21`

echo "Speicherabfrage: $verfuegbardf" >> $LOG_SCRIPT
if [ $verfuegbardf > $minimumdf ]
then
      mkdir test
echo "genuegend Speicherplatz verfuegbar"
else
echo "Speicherplatz zu wenig"
fi

ist der befehl verfuegbardf richtig um den avail Speicherplatz von 100 G abzufragen?
weil bei mri bekomme ich immer "Speicherplatz zu wenig".
 
Führe den Befehl doch einfach mal in einer Shell aus. Dann siehst du doch welches Feld aus deinem df-Output selektiert wird.
 
mit dem

Code:
df  | grep /test | cut -d ' ' -f 21
zeigt mir der Shell nix an.

habe jetzt mal folgendes gefunden, was mir persöhnlich besser gefällt und gibt auch den verfügbaren Speicherplatz an

Code:
df -h | grep /test | awk '{print($4)}

kurz noch eine Frage:

wie kann ich explizit einer Variable die Größe in GB zuweisen:

also: minimumdf=50 GB

wie kann ich das in einem shell-script definieren?
 
Kann dir sowas in Perl anbieten, falls es dir weiter hilft:

Code:
#!/usr/bin/perl -w

use Net::SMTP;

# /dev/hda3

$diskfreeM = `df|grep hda3|tr -s [:blank:]| cut -f3 -d\" \"`;
chomp($diskfreeM);
$diskfree = $diskfreeM * 1024;
$max_used = 78000000;

# print "diskfreeM: $diskfreeM\ndiskfree: $diskfree\n";

# Simple Email Function
# ($to, $from, $subject, $message)
sub sendEmail
{
    my ($to, $from, $subject, $message) = @_;
    my $sendmail = '/usr/sbin/sendmail';
    open(MAIL, "|$sendmail -oi -t");
    print MAIL "From: $from\n";
    print MAIL "To: $to\n";
    print MAIL "Subject: $subject\n\n";
    print MAIL "$message\n";
    close(MAIL);
}

if($diskfreeM >= $max_used) {
    sendEmail('1234567@skyper.de', 'root@meinedomain.tld', 'Disk on meinedomain.tld is running out of space.', 'Disk on intergerma.de is running out of space.');
}

Einfach das Device anpassen. $max_used ist der Wert, der maximal belegt sein darf bevor du eine Email bekommst.
 
Zurück
Oben