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. 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
    1. Modérateur
      Salut,

      Affiche le résultat de
      ls -ld /home/wwhx
      0
      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...
        0
        1. Modérateur
          Salut,

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


          La syntaxe est mauvaise :

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

          Devrait aller mieux ;-))
          0
          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 ^^
            0
            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"
              0
              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
                0
                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)?
                  0
                  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...
                    0
                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.
                  0
                  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 ,-))
                    0