Forum Programmation.shell Un code simple que je ne trouve pas

Posté par  .
Étiquettes : aucune
0
19
nov.
2006
Bonjour celà fait longtemps que je n'ai pas programmé en shell et il y a une chose très importante que je n'arrive plus à faire

c'est très simple le but est de créer un script qui retourne la taille d'un fichier passé en parametre avec la commande 'ls-l'
par exemple je tape en ligne de commande:
sh taille.sh nomfichier.txt
et ca devrait me retourner 50 ou 52 ou, etc... vous avez compris quoi

j'ai d'abord pensé à recuperer le nom du fichier en parametre en le placant dans $1 mais ensuite j'aimerai savoir comment recuperer la taille dans le 'ls -l' car j'arrive à retourner toutes les infos sur le fichier avec droits utilisateur groupe, etc mais pas uniquement la taille. Je sais qu'il existe un truc en faisant: read droit utilisateur groupe...taille....nom
mais je sais plus comment faire. Dois rendre ca pour demain en cours alors aidez moi svp lol!!! Merci Tavarez59
  • # read ou awk

    Posté par  (site web personnel) . Évalué à 2.

    • Soit tu as la solution avec read, et tu y étais presque (tu n'as pas dû beaucoup chercher pour le plus trouver comment faire) :
      allergy@hali:/tmp$ ls -l plop | read droits pointeurs proprio groupe taille date heure nom
      echo $taille
      15184
      allergy@hali:/tmp$
      
      Ici, les noms comme "droits", "pointeur", taille", etc. sont arbitrairement choisis.
    • Soit la solution avec awk, que je trouve plus propre (Intuitivement. Si quelqu'un a un argument pour ou contre, qu'il le fasse savoir) :
      allergy@hali:/tmp$ ls -l plop | awk '{print $5}'
      15184
      allergy@hali:/tmp$
      
      Le $5 de la commande awk signifie simplement "le cinquième champ de la ligne".
    • [^] # Re: read ou awk

      Posté par  . Évalué à 2.

      Je te remercie pour ta reponse et je pense que ca doit tourner. En fait j'ai pas mal reflechi mais pas moyen que ca tourne j'avais bcp de trou de mémoire et on voit tellement de langages que je m'emmêle les pinceaux et pas moyen de trouver un truc correct sur le net. merci bien si j'ai encore un problème la dessus je préviendrai.
      • [^] # Re: read ou awk

        Posté par  . Évalué à 1.

        Euh en fait j'ai juste une précision à te demander que signifie plop et @haly.../$tmp j'ai jamais vu ça.
        Si c'est pour lire le parametre en ligne de commande moi j'ai l'habitude d'utiliser $1 Merci encore
        • [^] # Re: read ou awk

          Posté par  (site web personnel) . Évalué à 1.

          « allergy@hali:/tmp$ » c'est juste le prompt de mon shell, tu ne dois pas le taper :)
          « plop » c'est le nom du fichier. À remplacer par un $1 dans ton cas, donc.
  • # Utiliser ls -l ?

    Posté par  (site web personnel) . Évalué à 2.

    Il faut utiliser ls -l forcement ?
    Parce que bon sinon ls -s sera plus facile a parser.

    genre

    ls -s "$1" | cut -d' ' -f1

    ou en pur bash :


    lsout=$(ls -s "a.out")
    echo ${lsout%% *}
    • [^] # Re: Utiliser ls -l ?

      Posté par  . Évalué à 1.

      Oui je dois utiliser ls -l c'est bien ca le probleme que j'ai lol

      vous pensez que si dans mon script je tape simplement

      ls -l $1 | read utilisateur groupe ..... nom
      echo $taille

      ca fonctionnera?
      Car en fait j'ai pas linux chez moi encore et donc peux pas tester lol
      Merci
      • [^] # Re: Utiliser ls -l ?

        Posté par  (site web personnel) . Évalué à 2.

        Déjà, mettre "$1" et pas $1 sinon ca ne marchera pas s'il y a des espaces dans le nom de fichier et sinon oui ca devrait marcher. Pour faire propre il faudrait aussi vérifier que ton script est bien lancé avec un paramêtre et faire une jolie erreur sinon, genre :
        if [ -z "$1" ]; then
          echo "Usage: $0 "
          exit 1
        fi
        read rights links owner group size date time file < <(ls -l "$1")
        echo $size
        
        C'est en quel shell que tu dois le faire ? parce que ceci ne marche qu'en bash, et la solution avec | et ne marchera pas en bash (le read est fait dans un sous shell et les variables sont perdues ensuite). Je pense qu'utiliser awk sera plus portable mais je ne sais pas si tu as le droit...
        • [^] # Re: Utiliser ls -l ?

          Posté par  . Évalué à 1.

          Je suis en shell de bourne et je ne peux pas utiliser awk je dois utiliser ls -l. donc la solution que j'ai proposé marcherai bien dans ce cas? Je pourrai utiliser | ? Sinon c'est vrai qu'il faut faire un test en cas d'erreur j'ajouterai ca. Merci
    • [^] # Re: Utiliser ls -l ?

      Posté par  (site web personnel) . Évalué à 2.

      ls -l |tr -s " "|cut -d' ' -f5
  • # bof

    Posté par  . Évalué à 5.

    Vu le script demandé, son utilité et le niveau de lolitude du message, je sens bien l'étudiant qu'aime pas linux plus que ça, qui à un petit script tout pourri à faire pour le lendemain et qui veut pas se prendre la tête ...

    Commence par installer un linux, ça peut aider.
  • # Cygwin

    Posté par  . Évalué à 1.

    Si tu n'as pas envie d'installer Linux, tu peux au moins installer cygwin
    pour windows, t'auras un shell pour tester.
    (cygwin.com)
  • # Et avec la commande wc...

    Posté par  . Évalué à 1.

    Salut,

    Juste une question? Ne serait-ce pas suffisant avec la commande wc?
    sh taille.sh nomfichier.txt

    Et taille.sh:
    ----------------
    #!/bin/sh -f

    cat $1 | wc -c
    exit 0
    ----------------

    La commande wc est fait pour ca, cad, compter avec:
    l'option -c: pour compter les caracteres
    l'option -l pour compter les lignes

    Salut,
    Phil.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.