#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 !!
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
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
./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 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
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 ....
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
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
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
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 !!
Welcome to the real world
________________________________
Hors ligne