Menu

Script sous centos

Messages postés
26
Date d'inscription
mercredi 29 novembre 2017
Statut
Membre
Dernière intervention
19 mars 2019
- - Dernière réponse : [Dal]
Messages postés
5099
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2019
- 5 mars 2019 à 12:07
Bonjour à tous,

je cherche à écrire un script sous linux, qui me pose beaucoup de problème. Je dois créé un fichier prog.sh qui va ré-insérer la ligne package REPERTOIRE; pour chaque fichier (il y en a beaucoup) .java d'un REPERTOIRE

Exemple : le fichiers .java du répertoire jeu_uno devrait commencer par la ligne : package jeu_uno;

Pour réparer un projet, je dois exécuter mon script directement dans le même répertoire que les fichiers .java, p.ex:
cd jeu_uno/src/jeu_uno
cp ~/java.sh .
bash java.sh


Cela fait un moment que je suis bloqué, si une personne aurait une idéé de comment s'y prendre, me le dire serait très gentil.

Cordialement,
Afficher la suite 

Votre réponse

1 réponse

Messages postés
5099
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2019
937
0
Merci
Salut Chertsey2011,

Tout d'abord, assures toi de bien disposer d'une copie des fichiers que tu veux traiter.. juste au cas où...

Ensuite, tu peux essayer ceci :

#!/bin/bash

CURR_DIR="$(pwd | sed "s/.*\///")"
JAVA_PKG="package $CURR_DIR;\n"

for JAVA_FILE in *.java; do
    JAVA_FILE_TMP="$JAVA_FILE.tmp"
    echo "processing $JAVA_FILE as $JAVA_FILE_TMP"
    echo -e $JAVA_PKG | cat - $JAVA_FILE > $JAVA_FILE_TMP
    #echo "renaming $JAVA_FILE_TMP to $JAVA_FILE"
    #mv $JAVA_FILE_TMP $JAVA_FILE
done

et voir si les fichier *.tmp sont créés comme tu le souhaites.

Si c'est bien le cas, tu peux supprimer les fichiers *.tmp, décommenter les lignes 10 et 11 ci-dessus et exécuter le script dans le répertoire concerné.

Dal
[Dal]
Messages postés
5099
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2019
937 -
Bonjour zipe31 et lEprofSonDkon,

J'ai commencé ma réponse à ce topic alors qu'il était initialement posté sur le forum Programmation, et le temps que je poste la réponse, il a été déplacé par un modérateur ici, qui est, sans doutes l'endroit le plus approprié (bein qu'il y ait des sous-forums "batch" et "powershell" pour Windows, il n'y en a pas pour Bash ou autres shells).

C'est sympa de retrouver les anciens du forum Linux et les moins anciens :-)

Sur ma proposition en ligne 3 du script, c'est mon réflexe de programmeur Perl que de vouloir utiliser les regexp pour résoudre tous les problèmes :-) et il y a bien sûr les deux solutions tout à fait adaptées que vous décrivez pour obtenir le nom du répertoire courant, qui sont plus directes.

Sur les autres aspects de votre échange :
- Chertsey2011 indique très clairement qu'il veut que son script opère sur un seul répertoire et qu'il doit exécuter le script directement dans le même répertoire où se trouvent les fichiers .java qu'il veut retraiter, comme le montre aussi son scénario d'usage
- Chertsey2011 veut uniquement le nom du répertoire courant à l'exclusion d'autres chose pour "réparer" son projet Java dans un répertoire en insérant cette information dans une directive
package


Par rapport à sa spécification, j'ai seulement pris la liberté d'insérer, en plus de la ligne souhaitée, un saut de ligne, qui est un style habituel en Java pour séparer visuellement cette première ligne d'autres directives d'import qui peuvent suivre ou des déclarations de classes.

Selon ma compréhension, c'est un quick-and-dirty hack pour résoudre un problème ponctuel de "réparation" de code que veut Chertsey2011 sur un répertoire donné, et pas un nécessairement un script pour de multiples usages à venir, ou devant avoir un niveau de contrôle et de sécurisation passant des certifications aéronautiques pour piloter un Airbus ;-)
lEprofSonDkon
Messages postés
162
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
17 mai 2019
6 > [Dal]
Messages postés
5099
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2019
-
ça ne doit pas empêcher d'indiquer que les conventions veulent qu'on vole à droite.

et, un problème ponctuel n'impose pas l'écriture d'un script.
dans ce cas, c'est le besoin de contrôle/évaluation d'une personne tierce qui conduit à "Je dois créé un fichier prog.sh[...]".
[Dal]
Messages postés
5099
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2019
937 -
Je t'invite vivement à proposer un code modifié ou différent du mien implémentant les conventions que tu penses devoir être respectées et répondant au besoin de Chertsey2011. S'il y a des conventions que j'ignore ou que j'ai omises, je serais très content que tu me les enseignes ou que tu me les rappelles et ce savoir sera probablement profitable à d'autres personnes tombant sur ce topic.

J'apprends tous les jours en participant à CCM, et je partage mon savoir quand je pense qu'il peut aider quelqu'un.

C'est la beauté du forum :-)

un problème ponctuel n'impose pas l'écriture d'un script

Rien n'impose quoi que ce soit, on peut résoudre un problème ponctuel à coups de find et de awk en une ligne de commande, ou en écrivant un script Bash, que l'on pourra garder sous la main et réutiliser et améliorer si le problème que l'on pensait ponctuel se manifeste en fin de compte de façon récurrente ou différente (tu l'améliores et tu l'étends quand tu constates que tu as besoin de l'améliorer et de l'étendre).

dans ce cas, c'est le besoin de contrôle/évaluation d'une personne tierce qui conduit à "Je dois créé un fichier prog.sh[...]".

Il est, en effet, possible qu'on ait demandé à Chertsey2011 de faire ce script et qu'avant de l'utiliser, la personne en question doive vérifier que le script fait bien ce qu'il est sensé faire. Ce n'est pas une certitude, seul Chertsey2011 peut nous le dire.

Si tu penses que ce simple fait justifie des modifications ou un code différent du mien, be my guest!
lEprofSonDkon
Messages postés
162
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
17 mai 2019
6 -
j'ai mis un code ici

lors d'une assignation les guillemets autour d'une substitution de commande ne sont pas requis.
il est préférable de mettre les commandes sed entre apostrophes, au moins pour qu'il voit les fins de lignes (
$
).
les variables "utilisateur" (par opposition aux variables environnementales/systèmes) doivent ne pas être tout en majuscules pour éviter que les premières écrasent ces dernières.
les développements de variables doivent toujours être mis entre guillemets; sauf si on sait pourquoi.
[Dal]
Messages postés
5099
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mai 2019
937 -
merci pour tes remarques très pertinentes
Commenter la réponse de [Dal]