Permission denied sur script schell (while) [Résolu/Fermé]

Signaler
Messages postés
1356
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
-
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...

9 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 809
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 503
Salut,

Affiche le résultat de
ls -ld /home/wwhx
Messages postés
1356
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
261
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...
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 809
Salut,

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


La syntaxe est mauvaise :

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

Devrait aller mieux ;-))
Messages postés
1356
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
261
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 ^^
Messages postés
1356
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
261
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"
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 809
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
Messages postés
1356
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
261
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)?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 809
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...
Messages postés
1356
Date d'inscription
mardi 21 avril 2009
Statut
Membre
Dernière intervention
27 juillet 2012
261
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.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 809
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 ,-))