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. 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 ,-))
  2. 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...
  3. 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. 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 (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. 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
            Salut,

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


            La syntaxe est mauvaise :

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

            Devrait aller mieux ;-))
            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...