Shell : exécuter un script

Bonjour à tous,
je suis débutante dans l'univers LINUX, je m'initie donc à partir d'exemples. J'ai commencé par essayer de créer un script:

#!bin/bash
#on met dans le fichier liste le nom de tous les fichiers de l'arborescence (ls -R récursif)
ls -R > liste
#on teste le code de retour de la commande de grep
#recherche du mot spécifié par $1 dans le fichier liste
if grep -w $1 liste
then echo "Il y a un fichier nommé $1 dans cette arborescence"
fi
#on efface le fichier liste après usage
rm list

C'est un script donné par le professeur, donc exempt d'erreur, mais pourquoi quand je tape le nom du fichier dans la console shell, j'obtiens le message d'erreur du style "bash: fichier not found" ?
Je vous remercie pour l'aide salvatrice que vous pouvez m'apporter.
dylady
P.-S.: la commande file appliquée sur mon fichier renvoit text, est-ce là le problème?

12 réponses

  1. Modérateur
    Salut,

    Sûrement que tu n'as pas rendu ton fichier exécutable par la commande :
    chmod +x ton_script
    Fichier que tu exécuteras ensuite en lançant la commande :
    ./ton_script
    ou
    sh ton_script
    ;-))
    1. Coucou oui j'ai fait ce changement de droit d'accès : 'chmod u+x nom_script'.
      Mais effectivement s'il faut taper './nom_script' pour l'exécuter, ça explique tout. Donc j'essaierai ça.
      Merci
      1. Modérateur
        Hello,

        ou encore, mets à jour la variable PATH
        export PATH=$PATH:/chemin/versscript/
        et ensuite pour exécuter tu tapes le nom de script (bien sûr avant il faut le rendre exécutable avec chmod ;-))
        script
        lami20j
        1. salut lami20j, dans ta commande :
          export PATH=$PATH:/chemin/versscript/
          je dois tout recopier le début jusqu'au premier slash et compléter le chemin jusqu'au directory où se trouve mon script c ça?Et enfin achever la commande par un dernier slash?
          merci :)
      2. ou peu etre se mettre dans le rep du script....

        cd /home/user/dossierscript

        puis un sh tonscript.sh
        1. Coucou Hyro, merci de ta participation. Bonjour tout le monde. Et bien je sais dans quel répertoire se trouve mon fichier (j'ai pu le vérifier avec la commande 'pwd monfichier'), mais même en étant dans le bon directory, on me renvoit le message d'erreur 'bash: monfichier: command not found'.
          Le seul moyen qui a réussi pour exécuter mon script était de taper : './' devant le nom du fichier, comme l'a suggéré jipicy. Pour le script que j'ai spécifié dans un message précédent, il ne se passe rien à part le prompt blanc sur la ligne suivante. Qu'est-ce que ça signifie?

          P.-S. :Maintenant, j'essaye d'étudier le PATH pour pouvoir utiliser les conseils de lami20j.

          A plus
          1. Bonsoir,
            ça y est mon script s'exécute:
            #!bin/bash
            #on met dans le fichier liste le nom de tous les fichiers de l'arborescence (ls -R récursif)
            ls -R > liste
            #on teste le code de retour de la commande de grep
            #recherche du mot spécifié par $1 dans le fichier liste
            if grep -w $1 liste
            then echo "Il y a un fichier nommé $1 dans cette arborescence"
            fi
            #on efface le fichier liste après usage
            rm list
            Voilà ce qui s'affiche dans la console:
            .:
            Desktop
            fichierdd
            fichierdd~
            liste
            tmp

            ./Desktop:
            Corbeille
            Home.desktop

            ./Desktop/Corbeille:

            ./tmp:
            fglrx-glc22-4.2.0-2.9.6.i586.rpm
            orbit-who

            ./tmp/orbit-who:
            linc-22c9-0-328a3c2fccb30
            linc-22d8-0-636174f6671d0
            linc-2381-0-2d86ed89dcd2f
            linc-24e7-0-3d85e33b58da
            linc-6cbc-0-5bd8b671634d

            Je vais essayer de déchiffrer et comprendre ce week end, mais si vous pouvez m'y aider, je serais enchantée.
            A plus
            1. Modérateur
              Salut,

              Affiche-nous le résultat de la commande :
              ls -l
              depuis le répertoire contenant ton fichier.

              Puis dans un second temps, affiche-nous aussi les commandes que tu tapes et l'erreur exacte affichée par le shell.

              Merci :-))
              1. Voilà pour le 'ls -l'
                [who@epf-s5c2 ~]$ ls -l
                total 24
                drwx------ 3 who who 4096 jui 13 2005 Desktop/
                -rw-rw-r-- 1 who who 693 nov 17 18:18 explpoly2pag8.txt
                -rwxr--r-- 1 who who 373 nov 17 18:10 fichierdd*
                -rwxr--r-- 1 who who 372 nov 17 18:10 fichierdd~*
                -rw-r--r-- 1 who who 296 nov 17 18:11 liste
                drwx------ 3 who who 4096 nov 17 18:20 tmp/
                [who@epf-s5c2 ~]$

                Et il n' y a plus d'erreur, sans doute parce que j'étais sur mandrake 10.0 (Quand ça bloquait) et plus sur mandriva ;)
                1. Modérateur
                  Salut,

                  P.-S.: la commande file appliquée sur mon fichier renvoit text, est-ce là le problème?

                  Attention pour la syntaxe, j'ai remarqué une erreur
                  au lieu de #!bin/bash il faut écrire
                  #!/bin/bash
                  Maintenant la commande file doit afficher
                  nomfichier: Bourne-Again shell script text executable
                  lami20j
                  1. Bonjour lami20j, je suis désolée en fait j'ai recopié rapidement le script depuis mon polycopié et j'ai oublié le slash, par contre dans ma console il y était bien.
                    Le message dont tu parles s'affiche bien:'Bourne-Again shell script text executable'. Merci encore.
                  2. Modérateur
                    @dyladymandrivaRe,

                    un résumé pour ta demande

                    Pour pouvoir exécuter un programme en ligne de commande il y plusieurs possiblités (avec la condition bien sûr que le fichier soit exécutables - un coup d'oeil sur attributions droits sous GNU/Linux )

                    1. en utilisant le chemin absolu

                    Dans ce cas n'importe où on se trouve on n'as pas de problèmes
                    /chemin/vers/programme
                    2. en utilisant le chemin relatif

                    Dans ce cas il faut aller dans le répertoire qui contient l'exécutable
                    cd /chemin/vers/programme
                    ./programme
                    3. en ajoutant le chemin qui contient l'exécutable à la variable PATH
                    export PATH=$PATH:/chemin/vers/programme
                    programme
                    Pour plus de détails regarde variable PATH

                    lami20j
                  3. @dyladymandrivaBonsoir, moi mon script s'exécute déjà, je vous ai collé dans un message antérieur ce qu'il donnait comme résultat. Mais je me demande comment interpréter les résultats.
                    Bonne soirée