2016-05-03 5 views
1

Ich versuche, die Stat Ausgabe mit der ganzen Zahl zu vergleichen. Ich bekomme nicht die erwartete Leistung raus.Vergleichen der Ausgabe von Stat-Befehl mit Integer-Variable in Shell-Skript

XX_CONFIG_LOCATION=/tmp/config.txt 
MAXIMUM_FILE_SIZE=123000 
FILESIZE= stat --printf=%s $XX_CONFIG_LOCATION 

if [[ "$FILESIZE" -gt "$MAXIMUM_FILE_SIZE" ]] 
then 
    echo "file size is greater" 
else 
    echo "file size is lesser" 
fi 

Hier Ausgabe von geteilt Befehl 123.784 (Dateigröße), aber die maximale Dateigröße ist 123000. Hier erwartete Ausgabe ist „Datei ist größer“, aber jedes Mal, wenn ich Dateigröße bin immer ist weniger. Was ist das Problem mit dem Code?

Antwort

3

Sie benötigen Befehl Substitution die STDOUT- (oder STDERR) einen Befehls in einer Variablen zu speichern:

FILESIZE=$(stat --printf='%s\n' "$XX_CONFIG_LOCATION") 

Wie es derzeit steht die Variable FILESIZE auf null gesetzt ist und während arithmetischen Vergleich taten das bash Schlüsselwort [[ die richtige Ausgabe geben:

$ foo=        
$ [[ $foo -gt 4 ]] && echo OK || echo Not OK 
Not OK 

auch zur Kenntnis, dass bash (und andere Schalen) erlaubt es nicht, Raum zulassen (n) um = in variable Dezember Lateration.

+0

@Thanks heemayl – Shriram

+0

@Shriram meine Änderungen prüfen – heemayl

0

Nichts neues, aber hier ist der Grund für Ihr Versagen. Haben Sie bemerkt, wo das Dateiattribut (75 in diesem Fall) eingequetscht ist?

Case-I:

ola:ola~/.scratch$ stat --printf=%s sample.txt 
**75ola**@ola:~/.scratch$ 

Case-II:

ola:ola~/.scratch$ stat --printf='%s\n' sample.txt 
75 
[email protected]:~/.scratch$ 
Verwandte Themen