2017-10-19 2 views
2

Ok, débutant ici:
Comment puis-je atteindre l'objectif suivant:Comment vérifier si la taille d'un fichier est supérieure à une certaine valeur dans Bash

  • Je dois vérifier la taille d'un fichier
  • comparer ensuite cette taille de fichier à un nombre fixe en utilisant une condition if et instruction conditionnelle correspondante

jusqu'à présent, je donne les résultats suivants:

#!/bin/bash 

# File to consider 
FILENAME=./testfile.txt 

# MAXSIZE is 5 MB 
MAXSIZE = 500000 

# Get file size 
FILESIZE=$(stat -c%s "$FILENAME") 
# Checkpoint 
echo "Size of $FILENAME = $FILESIZE bytes." 

# The following doesn't work 
if [ (($FILESIZE > MAXSIZE)) ]; then 
    echo "nope" 
else 
    echo "fine" 
fi 

Avec ce code, je peux obtenir le nom du fichier dans la variable $ FILESIZE, mais je ne peux pas le comparer avec une valeur entière fixe.

EDIT

#!/bin/bash 
filename=./testfile.txt 
maxsize=5 
filesize=$(stat -c%s "$filename") 
echo "Size of $filename = $filesize bytes." 

if ((filesize > maxsize)); then 
    echo "nope" 
else 
    echo "fine" 
fi 
+2

'si [(($ FILESIZE> MAXSIZE))]; '->' if ((FILESIZE> MAXSIZE)); 'Les opérateurs arithmétiques peuvent servir d'expression conditionnelle. (vous n'avez pas besoin du '$' dans '((...))') –

Répondre

5

Couple de questions syntaxiques.

  1. Les définitions variables dans bash ne prennent pas d'espaces, il aurait dû être MAXSIZE=500000, sans espaces
  2. L'opération de comparaison façon dont on fait est incorrect. Au lieu de if [ (($FILESIZE > MAXSIZE)) ];. Vous pouvez très bien utiliser propre opérateur arithmétique de bash seul et ignorer l'opérateur [ juste if ((FILESIZE > MAXSIZE)); then

Si vous êtes inquiet au sujet des problèmes de syntaxe dans votre script, utilisez shellcheck vérification de syntaxe vos scripts et corriger les erreurs comme on le voit à partir de cela.


En tant que pratique de codage général minuscules variables définies par l'utilisateur dans bash pour ne pas les confondre avec les variables d'environnement spéciales qui sont interprétées à des fins différentes par le shell (par exemple $HOME, $SHELL)

+1

Bonne prise sur les espaces ... –

+1

@Inian Alors ce que je viens de faire a été d'exécuter un chmod + x sur le fichier, et de le lancer directement avec './filename.sh' et ça marche bien. Je courais précédemment avec la commande 'sh./Filename.sh'. Je suis confus sur quelle est la différence majeure entre les deux. Ma version de bash est: 'GNU bash, version 4.3.8 (1) -release (x86_64-pc-linux-gnu) ' – bshakya