Permission denied sur script schell (while)

Résolu
tibobo_77 Messages postés 226 Date d'inscription   Statut Membre Dernière intervention   -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Affiche le résultat de
    ls -ld /home/wwhx
    0
  3. tibobo_77 Messages postés 226 Date d'inscription   Statut Membre Dernière intervention   263
     
    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
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

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


    La syntaxe est mauvaise :

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

    Devrait aller mieux ;-))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tibobo_77 Messages postés 226 Date d'inscription   Statut Membre Dernière intervention   263
     
    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
  7. tibobo_77 Messages postés 226 Date d'inscription   Statut Membre Dernière intervention   263
     
    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
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  9. tibobo_77 Messages postés 226 Date d'inscription   Statut Membre Dernière intervention   263
     
    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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
  10. tibobo_77 Messages postés 226 Date d'inscription   Statut Membre Dernière intervention   263
     
    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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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