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. 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. 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 ,-))