Bash-Skript konvertiert "Zeichenfolge" in Zahl

Bash-Skript konvertiert "Zeichenfolge" in Zahl

ich muss einen String in eine Ganzzahl ändern, da ich die Größe der Datei (extrahieren mit: stat -c%s $filename) mit einer Zahl überprüfe. Folgen Sie dem vollständigen Skript:

#!/bin/bash

# Variable that contain path destination file
path=/sobstitude

# Variable for size
size=1000

# Loop for file scan
for filename in /test/*;
do
    # Take the size of file
    filesize=$(stat -c%s $filename)

# Check if the file is empty
if [ $filesize > $size ]
then

    # Replace file
    mv $filename $path

fi
done

exit 0;

Antwort1

In bash/ sh-Variablen sind Zeichenfolgen enthalten, es gibt kein striktes Konzept für Ganzzahlen. Eine Zeichenfolge kann wie eine Ganzzahl aussehen und das reicht aus.

stat -c%s $filenamesollte eine Zeichenfolge zurückgeben, die wie eine Ganzzahl aussieht.

In Ihrem Fall liegt das Hauptproblem im Umleitungsoperator >(Sie haben jetzt wahrscheinlich Dateien mit Namen, die Zahlen im Arbeitsverzeichnis sind). Dieser Ausschnitt:

[ $Dateigröße > $Größe ]

sollte sein

[ "$filesize" -gt "$size" ]

UndVerwenden Sie doppelte Anführungszeichen um Variablensubstitutionen und Befehlssubstitutionen.

Antwort2

Es ist nicht nötig, Datentypen zu „konvertieren“. Sie können -gtoder verwenden -lt, um Zahlen zu vergleichen:

➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 4000 ]] && echo "bigger" || echo "smaller"
bigger

➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 400000 ]] && echo "bigger" || echo "smaller"
smaller

Das >ist grundsätzlich nicht falsch. Sie könnenarithmetische Ausdrückeum den Vergleich durchzuführen.

Ich habe [[anstelle von verwendet [für seineErweiterte Funktionen.

Beachten Sie, dass alle Variablenerweiterungen in doppelte Anführungszeichen gesetzt werden müssen. Insbesondere bei $filenameund $pathschlägt Ihr Skript fehl, wenn eine davon Leerzeichen enthält.

Antwort3

Leute, ich habe das Problem gelöst, nachdem ich Folgendes geändert habe:

if ((filesize > size))

Funktioniert jetzt, danke für die Unterstützung

verwandte Informationen