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" ]
Configuration: Windows Vista
Internet Explorer 7.0

4 réponses

  1. Modérateur
    Donc c'est résolu ? C'était un problème d'encodage des retours chariots (entre windows et linux) si j'ai bien suivi ?
    0
    1. 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
      0
      1. Modérateur
        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 ?
        0
        1. Modérateur
          Ben le problème c'est que chez lui il marche pas :-((
          0
      2. Modérateur
        Ca marche = ? Ce n'est pas plutôt -eq ?
        0
        1. Modérateur
          Salut mamiemando,

          Ben oui ça marche dans la mesure où c'est une chaîne de caractère qui est comparée et non pas un nombre ;-))
          0