Script ubuntu : cherchez l'erreur

Résolu/Fermé
sarphou Messages postés 12 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 1 février 2010 - 30 nov. 2008 à 22:44
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 2 déc. 2008 à 01:51
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 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
1 déc. 2008 à 00:16
Ca marche = ? Ce n'est pas plutôt -eq ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
1 déc. 2008 à 17:46
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 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
1 déc. 2008 à 22:49
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
1 déc. 2008 à 23:05
Ben le problème c'est que chez lui il marche pas :-((
0
sarphou Messages postés 12 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 1 février 2010
1 déc. 2008 à 23:47
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 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
2 déc. 2008 à 01:51
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