Permission denied sur script schell (while)

Résolu
Bonjour,
Pour commencer je tien a préciser que ce n'est qu'un embryon et que je viens de démarrer le shell....

En gros c'est un explorateur de dossier.

#!/bin/sh

cpu_name=/home/wwhx/ (c'est un exemple)
confirme="no"

while test "$confirme" != "yes"
do 		
		ls $cpu_name
		printf "\nChoisir un repertoire pour la mise a jour\n"
		read way_of_file
		cpu_name=""$cpu_name""$way_of_file""
		printf "%s\n" "${cpu_name}"
		printf "Revenir au dossier precedant?\n(yes/no)\n"
		read confirme2
		if [ "$confirme2" != "yes" ];
		then
				printf "Est-ce le bon fichier? (no: continue l'exploration des dossiers\n(yes/no)\n"
				read confirme
		fi
		else
				cpu_name=echo ${cpu_name%/*/}"/"
				confirme= ""
				printf "\n\n\n\n"
				
		fi
		printf "%s" "${cpu_name}"
done


Erreur en sortie:

       ./update_server.sh: 28: /home/wwhx/: Permission denied
                  ./update_server.sh: 28: : Permission denied


ligne 28 =
done


Si quelqu'un puvais m'eclairer...
Configuration: Linux
Firefox 3.0.14

9 réponses

  1. drwxr-xr-x 43 wwhx wwhx4096 2009-10-23 11:34 /home/wwhx
    [1]+  Done                    geany update_server.sh


    Donc normalement j'ai les droits...
    1. Modérateur
      Salut,

      else
      cpu_name=echo ${cpu_name%/*/}"/"


      La syntaxe est mauvaise :

      cpu_name="${cpu_name%/*/}/"

      Devrait aller mieux ;-))
      1. Thanks, ca m'a changé l'erreur :p

        ./update_server.sh: 28: no: not found
        


        Ps: je suis vraiment désolé, j'ai vraiment du mal avec la synthaxe shell.... pour le moment ^^
        1. Modérateur
          Essaie comme ça (il y avait un "fi" en trop), le script se lance, mais il y a encore des erreurs en fonction des choix ;-((

          #!/bin/sh
          
          cpu_name="/home/wwhx/" 
          confirme="no"
          
          while test "$confirme" != "yes"
          do 		
          		ls $cpu_name
          		printf "\nChoisir un repertoire pour la mise a jour\n"
          		read way_of_file
          		cpu_name="${cpu_name}${way_of_file}"
          		printf "%s\n" "${cpu_name}"
          		printf "Revenir au dossier precedant?\n(yes/no)\n"
          		read confirme2
          		if [ "$confirme2" != "yes" ];
          		then
          				printf "Est-ce le bon fichier? (no: continue l'exploration des dossiers\n(yes/no)\n"
          				read confirme
          		else
          				cpu_name="${cpu_name%/*/}/"
          				confirme= ""
          				printf "\n\n\n\n"
          				
          		fi
          		printf "%s" "${cpu_name}"
          done
          1. C'est ce que j'ai aussi...

            Tant que je ne passe pas dans le else, il n'y a aucun problème, tout ce déroule comme prévu.

            Mais si j'y passe, on me dit ligne "29 : no: not found".
            La valeur de "cpu_name" est bien prise en compte (le printf final me donne bien le bon chemin)
            Mais le "ls" de ce dernier me fait revenir a la dernière valeur de "cpu_name"

            Exemple:
            on commence dans "/home/wwhx/"
            Je lui dit d'aller dans le bureau.
            affichage: "/home/wwhx/bureau/"
            Je me suis tromper je ne voulais pas allez la! Il me propose de revenir en arrière, je répond "yes"
            affichage: "/home/wwhx/"
            ./update_server.sh: 25: no: not found
            Et le "ls" début m'affiche :
            ls /home/wwhx/bureau/

            La ligne d'erreur varie, mais renvoie toujours a la ligne du "donne"
            1. Modérateur
              Essaie comme ça :

              #!/bin/sh
              
              #set -xv
              
              cpu_name="/home/wwhx/"
              confirme="no"
              
              while test "$confirme" != "yes"
              do 		
              		ls $cpu_name
              		printf "\nChoisir un repertoire pour la mise a jour\n"
              		read way_of_file
              		cpu_name="${cpu_name}${way_of_file}/"
              		printf "%s\n" "${cpu_name}"
              		printf "Revenir au dossier precedent?\n(yes/no)\n"
              		read confirme2
              		if [ "$confirme2" != "yes" ];
              		then
              				printf "Est-ce le bon fichier? (no: continue l'exploration des dossiers\n(yes/no)\n"
              				read confirme
              		else
              				cpu_name="${cpu_name%/*/}/"
              				cd ../
              				confirme=""
              				printf "\n\n\n\n"
              				
              		fi
              		printf "%s\n" "${cpu_name}"
              done
              1. Toujours le "no: not found" mais ça marche ^^

                Que change le "cd .." (je sais que ça remonte d'un répertoire, mais la je vois vraiment pas)?
                1. Modérateur
                  Chez moi je n'ai aucune erreur ;-\

                  T'es sûr que tu ne fais pas d'erreur dans le choix des répertoires ? Rajoutes l'option "-p" à la commande "ls" (ls -p)...

                  Que change le "cd .."
                  Ben tu remontes d'un répertoire sans te soucier de savoir où tu es...
              2. Pour l'erreur tu avais raison,

                Par contre reprenant le nom complet du chemin a chaque fois, je ne comprend tjs pas l'utilisation du change directory.
                1. Modérateur
                  C'est clair qu'elle ne sert à rien, je l'avais mis pour mes tests en commentant la ligne précédente, et je l'ai laissée à la fin quand tout marchait bien, c'est donc un oubli, tu peux la virer ,-))