Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/12/2008, à 11:58

Furd

Erreur script débutant.

Bonjour,
je cherche à realiser un script.
ce script que fait-il ? il prend en parametre un unique fichier appelons le b.
dans b il y a deux colonnes de texte, dans la première il y a des lettres et dans la deuxième des mots :
d connexion
f arant
e rzigova
d rangeant

l'idée du script est de créer un fichier ayant pour titre le mot de la deuxieme colonne si la ligne commence par un f, un répertoire ayant pour titre le mot de la deuxieme colonne si elle commence par un d, si la lettre differe il doit faire un echo "lettre" : type inconnu.

jusqu'ici j'ai ça :

#!/bin/bash 
# script creationArboFichier2.sh 

if [ $# -ne 1 ] 
then 
echo Le script doit etre appele avec exactement un seul parametre 
exit 1 
fi 

if [ ! -f $1 ] 
then 
echo $1 doit etre un nom de fichier 
exit 1 
fi 
while read line 
do 
if [ "${line:0:1}" = "d" ] 
then 
echo "Création du répertoire ${line:2}" 
mkdir ${line:2} 
elif [ "${line:0:1}" = "f" ] 
then 
echo "Création du fichier ${line:2}" 
touch ${line:2} 
else 
echo "Lettre : \"${line:0:1}\" inconnue au bataillon." 
fi 
done < $1

lorsque je rajoute set -xv , j'ai ça :
voici le message d'erreur sur elif :

ubuntu@ubuntu:~/a$ ./script b 

if [ $# -ne 1 ] 
then 
echo Le script doit etre appele avec exactement un seul parametre 
exit 1 
fi 
+ '[' 1 -ne 1 ']' 

if [ ! -f $1 ] 
then 
echo $1 doit etre un nom de fichier 
exit 1 
fi 
+ '[' '!' -f b ']' 

while read line 
do 
if [ "${line:0:1}" = "d" ] 
then 
echo "Création du répertoire ${line:2}" 
mkdir ${line:2} 
elif [ "${line:0:1}" = "f" ] 
./script: line 22: erreur de syntaxe près du jeton `elif' inattendu 
'/script: line 22: `elif [ "${line:0:1}" = "f" ]

En esperant que vous pourrez m'aider

#2 Le 01/12/2008, à 14:08

n3o51

Re : Erreur script débutant.

Bonjour !! hmm

Alors d'un point de vu  personnel.N'etant pas un professionnel des scripts shell j'aime essayer de resoudre certains probléme.

Mais je vais t'avouer quelque chose je n'es rien conpris a t'as demande , tu ne prends pas le temps de formater ton texte et de lui donné une belle mise en forme (utilise les balise Code etc .. ).

Aussi  pour aider donne un exemple , le resultat obtenu ,ce que tu souhaite clairement.En prenant soins de séparés ton script des erreurs que tu obtiens dans le terminal.


Aussi une petite astuce debug t'es script de cette maniere

bash -x script.sh 2&>log

et post nous ensuite son contenu ici .

Merci d'avance !!

Dernière modification par n3o51 (Le 01/12/2008, à 14:08)


Welcome to the real world
________________________________

Hors ligne

#3 Le 01/12/2008, à 14:33

Furd

Re : Erreur script débutant.

je souhaite écrire un script qui peut créer des fichiers et des répertoires. Le fichier passé en paramètre doit contenir une liste de noms chacun d'eux étant précédé par un d si le nom correspond à un répertoire à créer ou par un f s'il s'agit d'un fichier

Une exécution possible donne ça :
prompt> cat fichier
d rep5
f fic1
f fic2
d fic1
f rep5
e rep8
d rep7
prompt> ./script.sh fichier
Le repertoire rep5 a été crée
Le fichier fic1 a été crée
Le fichier fic2 a été crée
Un element de nom fic1 existe deja
Un element de nom rep5 existe deja
e : type inconnu
Le repertoire rep7 a été crée

voici maintenant mon script

 #!/bin/bash 
# script creationArboFichier2.sh 

if [ $# -ne 1 ] 
then 
echo Le script doit etre appele avec exactement un seul parametre 
exit 1 
fi 

if [ ! -f $1 ] 
then 
echo $1 doit etre un nom de fichier 
exit 1 
fi 
while read line 
do 
if [ "${line:0:1}" = "d" ] 
then 
echo "Création du répertoire ${line:2}" 
mkdir ${line:2} 
elif [ "${line:0:1}" = "f" ] 
then 
echo "Création du fichier ${line:2}" 
touch ${line:2} 
else 
echo "Lettre : \"${line:0:1}\" inconnue au bataillon." 
fi 
done < $1

le message d'erreur est le suivant

 line 22: erreur de syntaxe près du jeton `elif' inattendu 
 line 22: `elif [ "${line:0:1}" = "f" ]

#4 Le 01/12/2008, à 15:12

n3o51

Re : Erreur script débutant.

Re moi tongue

tiens cela fonctionne

 #!/bin/bash 
# script creationArboFichier2.sh 

if [ $# -ne 1 ] 
then 
echo Le script doit etre appele avec exactement un seul parametre 
exit 1 
fi 

if [ ! -f $1 ] 
then 
echo $1 doit etre un nom de fichier 
exit 1 
fi 


while read line ; do 

if [ "${line:0:1}" = "d" ] ; then 
echo "Création du répertoire ${line:2}" 
{
mkdir ${line:2} 
}


elif [ "${line:0:1}" = "f" ] ; then 
{
echo "Création du fichier ${line:2}" 
touch ${line:2} 
}

else 
{
echo "Lettre : \"${line:0:1}\" inconnue au bataillon." 
}
fi 
done < $1

exit 0

J'ai creer un texte avec ce que tu as donné

d rep5
f fic1
f fic2
d fic1
f rep5
e rep8
d rep7

Ensuite dans le term pendant l'execution tongue

./test.sh fichier
Création du répertoire rep5
Création du fichier fic1
Création du fichier fic2
Création du répertoire fic1
mkdir: ne peut créer le répertoire `fic1': Le fichier existe
Création du fichier rep5
Lettre : "e" inconnue au bataillon.
Création du répertoire rep7

Par contre un dernier conseil si tu commence a ecrire des scripts pense a les mettre un minimum en page aussi pour la relecture .Car la ca va c'est un petit script big_smile  mais le jour ou tu ecrit des grands script personnes pourra te relire , meme toi je pense et donc il te sera difficile de trouver de l'aide smile

Simple conseil Hein !!!

Dernière modification par n3o51 (Le 01/12/2008, à 15:15)


Welcome to the real world
________________________________

Hors ligne

#5 Le 01/12/2008, à 15:37

Furd

Re : Erreur script débutant.

merci de ton aide j'ai copier/coller religieusement ce que tu as écris et voila ce qu'il me donne

ubuntu@ubuntu:~/a$ ls -l
total 8
-rwxr-xr-x 1 ubuntu ubuntu 572 2008-12-01 15:27 creationArboFichier2.sh
-rwxrwxrwx 1 ubuntu ubuntu  50 2008-12-01 15:29 fichier
ubuntu@ubuntu:~/a$ ./creationArboFichier2.sh fichier
: Aucun fichier ou dossier de ce type

#6 Le 01/12/2008, à 16:26

n3o51

Re : Erreur script débutant.

CreationArbofichier2.sh c'est le script :

 #!/bin/bash 
# script creationArboFichier2.sh 

if [ $# -ne 1 ] 
then 
echo Le script doit etre appele avec exactement un seul parametre 
exit 1 
fi 

if [ ! -f $1 ] 
then 
echo $1 doit etre un nom de fichier 
exit 1 
fi 


while read line ; do 

if [ "${line:0:1}" = "d" ] ; then 
echo "Création du répertoire ${line:2}" 
{
mkdir ${line:2} 
}


elif [ "${line:0:1}" = "f" ] ; then 
{
echo "Création du fichier ${line:2}" 
touch ${line:2} 
}

else 
{
echo "Lettre : \"${line:0:1}\" inconnue au bataillon." 
}
fi 
done < $1

exit 0

on es d'accord ?


Fichier c'est le fichier qui contient :

d rep5
f fic1
f fic2
d fic1
f rep5
e rep8
d rep7

tu as copier ca et c'est tout ? tu as vraiment rien modifier

Car moi j'ai effacé ce que j'ai fait et j'ai recréer les fichiers est pour moi ca fonctionne


Welcome to the real world
________________________________

Hors ligne

#7 Le 01/12/2008, à 17:21

frafa

Re : Erreur script débutant.

pour moi les deux fonctionnent
y compris son code du debut , donc a mon avis le bleme est ailleur
soit soit dans l'editeur utilisé pour creer ses fichiers soit
sa version de bash , soit ? ...
tu utilise quel editeur pour creer tes script ?
passe le retour de:

$(which bash)  --version

Dernière modification par frafa (Le 01/12/2008, à 17:21)

Hors ligne

#8 Le 01/12/2008, à 17:31

n3o51

Re : Erreur script débutant.

effectivement c'est bizard !!!


Welcome to the real world
________________________________

Hors ligne

#9 Le 01/12/2008, à 19:02

Furd

Re : Erreur script débutant.

Comme vous me l'avez demandé et avec un peu de retard :


ubuntu@ubuntu:~$ $(which bash) --version
GNU bash, version 3.2.39(1) -release (i486-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.

#10 Le 01/12/2008, à 19:06

n3o51

Re : Erreur script débutant.

avec quels editeur créer tu les script a demander aussi frafra


Welcome to the real world
________________________________

Hors ligne

#11 Le 01/12/2008, à 19:12

furd

Re : Erreur script débutant.

j'utilise l'éditeur de texte normal il s'appelle gedit non ?

#12 Le 01/12/2008, à 19:34

n3o51

Re : Erreur script débutant.

Ouep c'est ca !!! Moi je voit vraiment pas pourquoi ca fonctionne pas peut etre que frafra aura une idée


Welcome to the real world
________________________________

Hors ligne

#13 Le 01/12/2008, à 19:53

frafa

Re : Erreur script débutant.

ben euhh
non je voit pas pourquoi ca deconne un probleme d'encodage ?
fait passer retour de:

file -i creationArboFichier2.sh

Hors ligne

#14 Le 01/12/2008, à 20:00

Furd

Re : Erreur script débutant.

ubuntu@ubuntu:~$ file -i creationArboFichier2.sh
creationArboFichier2.sh: application/x-shellscript

#15 Le 01/12/2008, à 20:07

thierry2351

Re : Erreur script débutant.

Pourrais-tu nous déposer ton script / ton fichier quelque part où l'on puisse les télécharger ?

Hors ligne

#16 Le 01/12/2008, à 20:16

n3o51

Re : Erreur script débutant.

Avant envoie moi le resultat de

head -1 creationArboFichier2.sh | od -c

Dernière modification par n3o51 (Le 01/12/2008, à 20:18)


Welcome to the real world
________________________________

Hors ligne

#17 Le 01/12/2008, à 21:38

furd

Re : Erreur script débutant.

@thierry

je suis confus mais mes connaissances en la matière sont pour le moins limitées.

@n3o51

ubuntu@ubuntu:~$ head -1 creationArboFichier2.sh | od -c
0000000   #   !       /   b   i   n   /   b   a   s   h      \r  \n
0000017

#18 Le 01/12/2008, à 21:46

Кຼزດ

Re : Erreur script débutant.

je vois vraiment pas où est le problème hmm ....
peut-être un problème d'encodage ISO/UTF8 ?


dou

Hors ligne

#19 Le 01/12/2008, à 22:08

n3o51

Re : Erreur script débutant.

Lol ben moi j'ai trouvé le probleme

ubuntu@ubuntu:~$ head -1 creationArboFichier2.sh | od -c
0000000   #   !       /   b   i   n   /   b   a   s   h      \r  \n
0000017

Tu as des caracteres dos dans ton fichiers le retour chariot \r

Donc te suffit de faire

sed 's/^M$//' fichier

Pour pouvoir utiliser ton fichier et ton texte passe les deux en arguments a sed

sed 's/^M$//' creationArbofichier2.sh  >> newcreationArbofichier.sh
sed 's/^M$//' fichier  >> newfichier

Et apres tu utilise les deux fichiers avec new dedans et enleve les autres big_smile

Dernière modification par n3o51 (Le 01/12/2008, à 22:11)


Welcome to the real world
________________________________

Hors ligne

#20 Le 01/12/2008, à 22:12

furd

Re : Erreur script débutant.

pas sur d'avoir compris ce que je devais faire, mais merci beaucoup.
pourquoi est-ce que fichier est invisible aux yeux de mon script et pas quand je fais ls -l en fait ?

#21 Le 01/12/2008, à 22:21

n3o51

Re : Erreur script débutant.

Il es pas invisible le probleme est seulement que dans les  fichiers de type unix ou dos , ils   terminent leur ligne par un caractère "saut de ligne", représenté par le symbole "\n" (appelé Line Feed ). Mais les fichiers dos precede ce caractere ascii par un \r retour chariot. Ainsi, chaque ligne d'un fichier DOS se termine par la séquence  \r\n.

Et  unix n'arrive pas a lire ce fichier du moins a le convertir corectement .


Welcome to the real world
________________________________

Hors ligne

#22 Le 01/12/2008, à 22:29

n3o51

Re : Erreur script débutant.

La je vais faire un tour si tu as encore besoin fait signe smile


Welcome to the real world
________________________________

Hors ligne

#23 Le 01/12/2008, à 22:31

furd

Re : Erreur script débutant.

dernière question : le \r s'est ajouté parce que je fais une première copie sur mon ordi pour ensuite la mettre sur celui qu'a ubuntu ?

#24 Le 01/12/2008, à 22:46

frafa

Re : Erreur script débutant.

bien vu n3o51 smile
NE JAMAIS EDITER UN SCRIPT unix/Linux/mac SOUS WIN
SOUS PEINE DE TE RETROUVER AVEC CETTE ERREUR....
mise a la ligne sous:
unix/Linux \n
mac \r
win...be \r\n

Hors ligne

#25 Le 01/12/2008, à 23:21

n3o51

Re : Erreur script débutant.

Merci !! tongue


Welcome to the real world
________________________________

Hors ligne