Script ubuntu : cherchez l'erreur
Résolu
Bonjour,
très bien, je cherche à realiser un script.
ce script que fait-il ? il prend en parametre un 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 si la ligne commence par un f, un répertoire 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" ]
très bien, je cherche à realiser un script.
ce script que fait-il ? il prend en parametre un 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 si la ligne commence par un f, un répertoire 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" ]
Configuration: Windows Vista Internet Explorer 7.0
4 réponses
-
Ca marche = ? Ce n'est pas plutôt -eq ?
-
Merci de cette précision jipicy :-) Bon j'ai testé le 1er script il marche. Voilà ce que ça donne :
(mando@aldur) (~/pouet) $ ls b pouet.sh (mando@aldur) (~/pouet) $ set -xv && ./pouet.sh b set -xv && ./pouet.sh b + set -xv + ./pouet.sh b Création du répertoire connexion Création du fichier arant Lettre : "e" inconnue au bataillon. Création du répertoire rangeant (mando@aldur) (~/pouet) $ ls ls + ls --color=auto arant b connexion pouet.sh rangeant
Bref je ne vois pas trop où est le problème ? -
merci jipicy tu avais raison depuis le début seulement comme je copier/coller tes scripts de mon ordi windows à celui qui a ubuntu apparamment il y avait un \r en trop.
Merci de votre aide -
Donc c'est résolu ? C'était un problème d'encodage des retours chariots (entre windows et linux) si j'ai bien suivi ?