Probleme script simple

Résolu/Fermé
maxibgoode Messages postés 423 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 2 septembre 2010 - 28 févr. 2010 à 11:58
maxibgoode Messages postés 423 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 2 septembre 2010 - 28 févr. 2010 à 15:11
Bonjour,
Mon script ne marche pas :,(

Je voulais faire un script qui propose de mette les directives préprocesseur et le main dans des fichiers .h/.c/.cpp.

Pour les .h ça marche bien que petit soucis : le echo -e "blabla" affichera -e blabla dans le fichier!!

Pour les autres il y a un soucis au niveau de mes conditionnelles et boucles while mais je n'arrive pas à les corriger : j'ai des trucs du genre
./monScript.sh: line 24: [: !=: unary operator expected


Merci de bien vouloir m'aider.

Voici le script :


#!/bin/sh

#Saisie du nom du fichier
echo "Saisir le nom de votre fichier"
read nomFichier

case $nomFichier in
#Cas d'un fichier .h : inclusion des directives préprocesseur conditionnelles
*.h)

include=`echo $nomFichier | tr [:lower:] [:upper:]`
echo "#ifndef_$include" >> $nomFichier
echo "#define_$include" >> $nomFichier
echo -e "\n\n#endif" >> $nomFichier
echo "Directive préprocesseur incluses"
exit 0
;;

#Cas d'un fichier .c : demande d'inclusion de stdio, stdlib et unistd puis mise en place du main
*.c)

#STDIO
echo "Inclure stdio? (y/n)"
while [ $repio != 'y' ] || [ $repio != 'n' ]
do
read repio
done

if [ $repio = 'y' ]
then
echo "#include <stdio.h>" >> $nomFichier
echo "stdio.h a été inclu"
clear
fi

#STDLIB
echo "Inclure stdlib? (y/n)"
while [ $repLib != 'y' ] || [ $repLib != 'n' ]
do
read repLib
done

if [ $repLib = 'y' ]
then
echo "#include <stdlib.h>" >> $nomFichier
echo "stdlib.h a été inclu"
clear
fi

#UNISTD
echo "Inclure unistd? (y/n)"
while [ $repUni != 'y' ] || [ $repUni != 'n' ]
do
read repUni
done

if [ $repUni = 'y' ]
then
echo "#include <unistd.h>" >> $nomFichier
echo "unistd a été inclu"
clear
fi

#MAIN
echo "Inclure un main? (y/n)"
while [ $repM != 'y' ] || [ $repM != 'n' ]
do
read repM
done
if [ $repM = 'y' ]
then
echo -e "\n\nint main (int argc, char *argv[])" >> $nomFichier
echo -e "{\n\nreturn 0;\n}\n" >> $nomFichier
echo "$nomFichier contient un main"
clear
fi
exit 0

;;
#Cas d'un fichier .cpp : inclusion de iostream, string, utilisation du namespace et inclusion du main
*.cpp)

#IOSTREAM
echo "Inclure iostream? (y/n)"
while [ $repio != 'y' ] || [ $repio != 'n' ]
do
read repio
done

if [ $repio = 'y' ]
then
echo "#include <iostream>" >> $nomFichier
echo "iostream a été inclu"
clear
fi

#STRING
echo "Inclure string? (y/n)"
while [ $repStr != 'y' ] || [ $repStr != 'n' ]
do
read repStr
done

if [ $repStr = 'y' ]
then
echo "#include <string>" >> $nomFichier
echo "string a été inclu"
clear
fi

#NAMESPACE
echo "Utiliser le namespace std (y/n)"
while [ $repName != 'y' ] || [ $repName != 'n' ]
do
read repName
done
if [$repName = 'y']
then
echo -e "\nusing namespace std;" >> $nomFichier
echo "$nomFichier utilise le namespace std"
clear
fi

#MAIN
echo "Inclure un main? (y/n)"
while [ $repM != 'y' ] || [ $repM != 'n' ]
do
read repM
done
if [ $repM = 'y' ]
then
echo -e "\n\nint main (int argc, char *argv[])" >> $nomFichier
echo -e "{\n\nreturn 0;\n}\n" >> $nomFichier
echo "$nomFichier contient un main"
fi

exit 0

;;
#Défaut
*)
echo "Rien à faire."
exit 0
;;
esac
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
28 févr. 2010 à 12:15
Salut,

Remplace plutôt tes tests par (exemple sur ton 1er test (#STDIO) à appliquer à tous les autres...) :

#STDIO

while :
do
read -p "Inclure stdio? (y/n) " repio
case "$repio" in
y|n)	if [ "$repio" = 'y' ]
	then
	echo "#include <stdio.h>" >> $nomFichier
	echo "stdio.h a été inclu"
	sleep 2
	clear
	break
	else 
	echo "rien à faire..."
	break
	fi
	;;
*)	echo "Mauvais choix ! Recommencez s'il vous plaît."
	continue
	;;
esac
done

0
maxibgoode Messages postés 423 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 2 septembre 2010 76
28 févr. 2010 à 12:20
Merci je vais essayer.
Mais je ne comprends pas le while :
Est-ce que ça veut dire qu'il recommence tant que c'est le cas général?
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 895
28 févr. 2010 à 12:25
Le "while :" peut aussi s'écrire "while true", donc tant que la condition est vraie, faire...

Pour en sortir on met un "break" (cas du "y|n"), et pour recommencer on met un "continue" (cas du "*").
0
maxibgoode Messages postés 423 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 2 septembre 2010 76
28 févr. 2010 à 12:30
très bien en fait j'avais compris en tentant de réécrire ce que tu m'as donné.
Et as-tu une explication concernant le
echo -e "\n\n#endif" >> $nomFichier
qui va m'afficher le -e??
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 895
28 févr. 2010 à 13:22
Pas vraiment non ;-(

A tout hasard, essaie avec "/bin/echo -e"
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 févr. 2010 à 14:06
Salut,

Et as-tu une explication concernant le
echo -e "\n\n#endif" >> $nomFichier
qui va m'afficher le -e??


Côté shell il va ajouter à la fin de fichier deux sauts de lignes et ensuite #endif
~$ echo -e "\n\n#endif"


#endif


Côté C il s'agit de la fin de l'inclusion conditionnelle #ifndef


Par exemple pour s'assurer qu'un fichier d'en-tête n'est inclus qu'une seule fois

#ifndef HEADERS
  #define HEADERS "headers.h"
#endif
#include HEADERS


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxibgoode Messages postés 423 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 2 septembre 2010 76
28 févr. 2010 à 15:11
En fait hors du script il faut que je mette le -e tandis que dans le script je peux le retirer il prendra les saut de ligne quand même.
Merci en tout cas pour m'avoir aidé à résoudre mes problèmes de boucles.
Cordialement.
0