Script ubuntu : cherchez l'erreur

Résolu
sarphou Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
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" ]
A voir également:

4 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Ca marche = ? Ce n'est pas plutôt -eq ?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Ben le problème c'est que chez lui il marche pas :-((
0
sarphou Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
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
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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