Probleme script simple
Résolu
maxibgoode
Messages postés
423
Date d'inscription
Statut
Membre
Dernière intervention
-
maxibgoode Messages postés 423 Date d'inscription Statut Membre Dernière intervention -
maxibgoode Messages postés 423 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Probleme script simple
- Script vidéo youtube - Guide
- Iphone 14 simple - Guide
- Simple pdf - Télécharger - PDF
- Simple ocr - Télécharger - Bureautique
- Simple file locker - Télécharger - Sécurité
5 réponses
Salut,
Remplace plutôt tes tests par (exemple sur ton 1er test (#STDIO) à appliquer à tous les autres...) :
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
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?
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?
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??
Et as-tu une explication concernant le
echo -e "\n\n#endif" >> $nomFichier
qui va m'afficher le -e??
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question