Script sous centos

Fermé
Chertsey2011 Messages postés 26 Date d'inscription mercredi 29 novembre 2017 Statut Membre Dernière intervention 8 novembre 2021 - 27 févr. 2019 à 17:11
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 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,
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 27 févr. 2019 à 18:29
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
1
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 févr. 2019 à 18:53
Salut,

CURR_DIR="$(pwd | sed "s/.*\///")"
;-(

basename ${PWD}
devrait suffire ;-))
0
lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022 13
Modifié le 28 févr. 2019 à 05:28
salut,

la description est un peu vague.

je préfère
realpath
, car il retourne le chemin absolu.
et je préfère que les scripts contiennent des chemins absolus.

#!/bin/sh
path=$(realpath ./)
sed -si "1i\
package $path;" ./*.java
en ayant précédé l'exécution du script d'un
cd oùSontLesFichiers/
, c'est tout.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022
28 févr. 2019 à 06:51
Salut,
je préfère realpath, car il retourne le chemin absolu.
Oui mais en l'occurrence, le monsieur il ne veut pas le chemin absolu, mais le nom du répertoire courant si j'ai bien tout compris ;-\
0
lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022 13 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
28 févr. 2019 à 08:35
« la description est un peu vague »

il n'y a pas quelque part parmi les best practices un passage sur les préférences à adopter en ce qui concerne les chemins indiqués dans les scripts ?

sinon, et/ou s'il insiste, en
bash
:
curDir="${PWD##*/}"

MAIS, cela sous-entend qu'il y a eu un
cd
dans le script; ce qui est le plus souvent inutile, et source d'erreurs : "est-ce que je suis ici ? ou là ? ou où ?" :)
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 28 févr. 2019 à 11:24
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 ;-)
0