Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programme Shell

    30 janvier 2015 à 15:26:09

    Bonjour,

    J'ai une petite question à propos d'un programme en shell.

    Je cherche à afficher le type de tout les fichiers des répertoires que j'aurai indiqué en argument du script.

    j'avais déjà fait un programme qui affiche les types de fichiers ( fichier, dossier, mode bloc..), mais avec un nom de fichier en argument du script

    • Partager sur Facebook
    • Partager sur Twitter
      30 janvier 2015 à 15:43:33

      Salut,

      Tu as déjà la base avec le programme dont tu parles, voici ce que ça pourrait donner :

      for fichier in 'ls $1'
      do # Actions à faire sur chaque <fichier> trouvé
      done

      C'est similaire à un foreach

      -
      Edité par Rednax 30 janvier 2015 à 15:49:22

      • Partager sur Facebook
      • Partager sur Twitter
        30 janvier 2015 à 15:49:12

        Mais là je dois travailler avec un dossier que j'indique en paramètre quand j'éxécute mon script.

        Donc, j'ai mis à la place de fichier dans le for, la variable i. Dans le for, j'ai mis mes vérifs de fichiers, les if.

        Mais j'ai une erreur, erreur de syntaxe, près du symbole innatendu "(", pour cette ligne : for i in (ls $1)

        • Partager sur Facebook
        • Partager sur Twitter
          30 janvier 2015 à 15:52:14

          Oui j'ai édité entre-temps, ce sont des apostrophes.

          Si tu as un souci de code, colle le code complet :)

          • Partager sur Facebook
          • Partager sur Twitter
            30 janvier 2015 à 16:00:18

            Pas des apostrophes, des back-quotes

            for fichier in `ls $1`
            do
                file $fichier;
            done



            • Partager sur Facebook
            • Partager sur Twitter
              30 janvier 2015 à 16:03:19

              J'ai ces erreurs:

              ls: opérateur binaire attendu

              Voici mon code:

              for i in 'ls $i'
              do
              if [ -f $i ]
              then echo "fichier ok"
              elif [ -d $i ]
              then echo "dossier ok"
              #je rajoute en plus les lien symbolique et bloc...
              fi
              done
              



              • Partager sur Facebook
              • Partager sur Twitter
                30 janvier 2015 à 16:04:53

                remplaces tes apostrophes par des back-quotes
                • Partager sur Facebook
                • Partager sur Twitter
                  30 janvier 2015 à 16:12:21

                  Il fonctionne, mais ne m'indique pas les bon types, en effet le dossier contient un lien symbolique, et quand exécute le script, il m'indique que des fichiers et dossiers.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 janvier 2015 à 16:26:49

                    C'est parce qu'un lien symbolique est considéré comme étant un directory, ce n'est pas le type du fichier.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 janvier 2015 à 23:00:35

                      #!/bin/sh
                      
                      DIRECTORY="$1"
                      
                      find $DIRECTORY -maxdepth 1 | while read FILE; do
                        if [ -L $FILE ]; then
                          # lien symbolique
                        elif [ -d $FILE ]; then
                          # répertoire
                        elif [ -f $FILE ]; then
                          # fichier simple
                        fi 
                      done
                      
                      man test
                      pour plus d'infos

                      -
                      Edité par deblan 30 janvier 2015 à 23:03:26

                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 janvier 2015 à 12:58:15

                        J'ai essayé avec le DIRECTORY, mais il m'indique une erreur sur la 1ère ligne:

                        DIRECTORY not found, bus error

                        • Partager sur Facebook
                        • Partager sur Twitter
                          31 janvier 2015 à 22:06:20

                          [22:04] <simon@nikita:~> % cat /tmp/test
                          #!/bin/sh
                           
                          DIRECTORY="$1"
                           
                          find $DIRECTORY -maxdepth 1 | while read FILE; do
                            if [ -L $FILE ]; then
                              # lien symbolique
                              printf "$FILE est un lien symbolique\n"
                            elif [ -d $FILE ]; then
                              # répertoire
                              printf "$FILE est un répertoire\n"
                            elif [ -f $FILE ]; then
                              # fichier simple
                              printf "$FILE est un fichier simple\n"
                            fi
                          done
                          
                          [22:05] <simon@nikita:~> % /tmp/test android-studio
                          android-studio est un répertoire
                          android-studio/src est un répertoire
                          android-studio/android-studio-ide-135.1641136-linux.zip est un fichier simple
                          • Partager sur Facebook
                          • Partager sur Twitter
                            1 février 2015 à 10:23:45

                            Quand j'éxécute ce code, il ne m'affiche qu'une seule ligne d'erreur;

                            bus error

                            Je n'ai pas fait avant le "% cat /tmp/test, pour éxéuté mon script, j'utilise ça:

                            ./script.bash chemin

                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 février 2015 à 22:05:45

                              Hey, peut-être ce code marchera

                              #!/bin/bash
                              
                              for i in `ls $1`
                              do
                                  if [ -a "$1$i" ]; then echo "Le fichier $i existe";fi
                                  if [ -b "$1$i" ]; then echo "Le fichier $i est de type bloc";fi
                                  if [ -c "$1$i" ]; then echo "Le fichier $i est de type caractère";fi
                                  if [ -d "$1$i" ]; then echo "Le fichier $i est un répertoire";fi
                                  if [ -f "$1$i" ]; then echo "Le fichier est de type normal";fi
                                  if [ -L "$1$i" ]; then echo "Le fichier est de type lien symbolique";fi
                                  if [ -S "$1$i" ]; then echo "Le fichier est de type Socket";fi
                                  if [ -w "$1$i" ]; then echo "Le fichier est modifiable";fi
                                  if [ -x "$1$i" ]; then echo "Le fichier est exécutable";fi
                                  if [ -r "$1$i" ]; then echo "Le fichier est accessible en lecture";fi
                              done
                              
                              


                              -
                              Edité par Mobius00 3 février 2015 à 22:14:05

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Programme Shell

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown