IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

ré-Encodage texte script


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut ré-Encodage texte script
    Bonjour,
    Je suis débutant en scripting shell.

    On m'a donné le script ci-dessous à modifier. Suite à une migration d'environnement (windows > unix) les fichier générés par ce script doivent l'être au format unix (commande unix = dos2unix) et au format texte ISO-8859-1 (commande unix = iconv).
    Dans un premier temps j'aimerais comprendre ce que ce script fait effectivement.
    J'aimerai ensuite insérer les 2 commande unix précitées dans ce script...
    Merci pour votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/sh
    IBM_HEAPDUMPDIR=/product/dumpjvm
    IBM_JAVACOREDIR=/product/dumpjvm
    SNP_INIT_HEAP=256M
    SNP_MAX_HEAP=768M
     
    cd $SAV_HOME/WEB-INF/classes
     
    for lib in `ls $SAV_HOME/WEB-INF/lib`
    do
    	CP="$CP:$SAV_HOME/WEB-INF/lib/$lib"
    done
     
    CP="$CP:/product/ESIS/lib/ojdbc14-10.2.0.4.0.auchan.jar"
     
    # lancement du traitement
    java -Xmx512M -classpath $CP -DSAV_DATA=$SAV_DATA -DPRODUCT_LOG_HOME=/product_data/SAV/logs $1 $SAV_DATA/conf/batch_params.properties $2 $3 $4 $5
     
    res=$?
     
    echo Resultat du batch=$res
     
    exit $res

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 399
    Points
    19 399
    Par défaut
    Bonjour,

    quelle est ton interprétation ?

    c'est un mauvais script :
    • il utilise ls, et ON N'UTILISE PAS ls DANS UN SCRIPT !!!
    • il n'y a pas de guillemets autour des développement de variables



    de toute façon, si le script est exécuté sur unix/linux les retours de lignes seront au format UNIX
    quant à iconv, je ne connais java, donc je ne peux pas dire où/quels sont les fichiers créés.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 249
    Points : 13 472
    Points
    13 472
    Par défaut
    Bonjour

    Chez Auchan, on met ls dans un script ? Oh les branqu' !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for lib in "${SAV_HOME}"/WEB-INF/lib/*
    do
    	CP="$CP:$SAV_HOME/WEB-INF/lib/$lib"
    done
    Non?


    Pour ton problème principal, il n'y a que toi qui sache ce que fait réellement ce script puisque du code java est exécuté.


    De plus, on ne sait pas
    • si on peut intervenir avant le script.
    • si on peut intervenir après le script.
    • si les fichiers en entrée sont à modifier aussi.


    [grilled]
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    1) pardon pour ma question sans doute bête mais pourquoi on n'utilise jamais ls dans un script?

    2) que veut dire cette séquence ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for lib in "${SAV_HOME}"/WEB-INF/lib/*
    do
    	CP="$CP:$SAV_HOME/WEB-INF/lib/$lib"
    done

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 399
    Points
    19 399
    Par défaut
    parce que c'est une commande externe, dont la syntaxe du shell permet de se dispenser
    parce que si les noms de fichiers sont "exotiques" (espaces, tabulation, alinéas...) la boucle va tourner sur chaque élément du nom, et pas sur le nom en entier

    on ne va pas faire ton travail.
    on veut bien aider, mais il faut que tu fasses ta part.

    je te le demande encore : quelle est ton interprétation ? que penses-tu que font les commandes ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Je suppose que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for lib in `ls $SAV_HOME/WEB-INF/lib`
    do
    	CP="$CP:$SAV_HOME/WEB-INF/lib/$lib"
    done
    effectue une copie de lib mais où est l'emplacement source et l'emplacement cible?

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 294
    Points : 12 770
    Points
    12 770
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for lib in "${SAV_HOME}"/WEB-INF/lib/*
    do
    	CP="$CP:$SAV_HOME/WEB-INF/lib/$lib"
    done
    Il y a une erreur dans ce code, java n'appréciera pas
    Cordialement.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 399
    Points
    19 399
    Par défaut
    CP n'est pas cp : unix/linux est sensible à la casse.
    en plus, une commande n'est jamais immédiatement suivie d'un signe égal.

    que font les premières lignes sous le shebang ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Les 2 premières lignes sous le shebang, détermine le chemin des variable nommées
    les 2 suivantes la taille des variables nommées

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 294
    Points : 12 770
    Points
    12 770
    Par défaut
    Dans ton script tu as une variable non définie: SAV_HOME.
    Sinon, on peut simplifier en retirant la boucle for et initialiser la variable CP avec printf, ce qui donnerait:
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for lib in `ls $SAV_HOME/WEB-INF/lib`
    do
    	CP="$CP:$SAV_HOME/WEB-INF/lib/$lib"
    done
     
    CP="$CP:/product/ESIS/lib/ojdbc14-10.2.0.4.0.auchan.jar"
    faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lib=$(printf "%s:" "${SAV_HOME}"/WEB-INF/lib/*)
    CP="${CP}:${lib}/product/ESIS/lib/ojdbc14-10.2.0.4.0.auchan.jar"
    PS: je n'ai pas oublié de ":" après ${lib}, la variable fini toujours par un ":".
    Cordialement.

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 399
    Points
    19 399
    Par défaut
    ah, oui, c'est bien printf !
    et on peut aller plus loin (toujours plus loin ) : printf -v lib '%s:' /chemin/*.

    les premières lignes du script définissent des variables.
    c'est ainsi qu'on fait en shell : un nom, un signe égal, et une valeur.
    donc, dans la boucle, c'est la même chose; ce n'est pas une commande, c'est une assignation de variable.
    la boucle ne sert qu'à ça : construire une variable par concaténation.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 294
    Points : 12 770
    Points
    12 770
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    et on peut aller plus loin (toujours plus loin ) : printf -v lib '%s:' /chemin/*.
    Attention, ici, c'est une syntaxe spécifique bash...
    Cordialement.

  13. #13
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 249
    Points : 13 472
    Points
    13 472
    Par défaut
    Pour revenir au problème principal, les scripts bash articulent des logiciels entre eux.
    Ici, le script ne fait rien de particulier.
    C'est java qui fait tout le boulot.
    C'est donc le fichier jar dont il faudrait connaître les entrées/sorties.

    Je repose mes interrogations :
    • Peut-on intervenir avant ce script ?
    • Peut-on intervenir après ce script ?
    • Faut-il modifier le format des fichiers entrants ? (J'ai bien compris que le client ne parle que de la sortie qui le fait baver d'envie mais s'il s'agit d'une migration, c'est ta responsabilité de penser à l'entrée du script, abdel_59)



    Citation Envoyé par disedorgue Voir le message
    Il y a une erreur dans ce code, java n'appréciera pas
    Pas compris. C'est l'absence des 2 points à la fin ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 294
    Points : 12 770
    Points
    12 770
    Par défaut
    Dans la variable lib, il y a déjà l'arborescence et donc la concaténer encore à l'arborescence...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls $SAV_HOME/WEB-INF/lib
    ne ramène pas la même chose que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "${SAV_HOME}"/WEB-INF/lib/*
    Cordialement.

  15. #15
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 399
    Points
    19 399
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Attention, ici, c'est une syntaxe spécifique bash...
    ah ! trop loin.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #16
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 249
    Points : 13 472
    Points
    13 472
    Par défaut
    Effectivement.
    Merci .
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Pour revenir au problème principal, les scripts bash articulent des logiciels entre eux.
    Ici, le script ne fait rien de particulier.
    C'est java qui fait tout le boulot.
    C'est donc le fichier jar dont il faudrait connaître les entrées/sorties.

    Je repose mes interrogations :
    • Peut-on intervenir avant ce script ?
    • Peut-on intervenir après ce script ?
    • Faut-il modifier le format des fichiers entrants ? (J'ai bien compris que le client ne parle que de la sortie qui le fait baver d'envie mais s'il s'agit d'une migration, c'est ta responsabilité de penser à l'entrée du script, abdel_59)
    *Qu'entends tu par intervenir avant/après le script?
    *d'après ce que j'ai compris, le commande "iconv" ne permet pas de convertir un fichier vers un fichier de même nom. Le fichier en entrée doit avoir un nom différent du fichier en sortie

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2018
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    J'ai oublié de préciser que ce script fonctionne dans son état actuel. Le but n'est pas de réécrire le script mais de le modifier afin de convertir les fichiers que génère ce script.
    Comme je le disais dans mon premier post, avez-vous une idée sur la façon dont je peux insérer la commande iconv dans ce script.
    Je me suis familiarisé avec la commande iconv et je cherche à l'appliquer au script.
    Etant donné que les fichiers en entrées ne peuvent pas porter le même nom que les fichiers en sortie, j'essaie de trouver un moyen de renommer ces fiichiers > les convertir > les supprmier...

  19. #19
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 399
    Points
    19 399
    Par défaut
    ce script fonctionne
    peut-être, mais il est mal écrit.
    trouver un moyen de renommer ces fichiers > les convertir > les supprimer...
    c'est java avec le fichier .jar (que l'on ne connaît pas) qui génèrent le(s) fichier(s) à traiter; on n'en a aucune connaissance au niveau du script shell.
    le script indique à java les bibliothèques/classes qui serviront à traiter "je ne comprends pas la commande java ni dire quels fichiers sont à traiter et seront générer".
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #20
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 249
    Points : 13 472
    Points
    13 472
    Par défaut
    Citation Envoyé par abdel_59 Voir le message
    *Qu'entends tu par intervenir avant/après le script?


    Ce script est lancé par quelque chose. Quelle chose ?
    Et le résultat est récupéré par quelque chose. Quelle chose ?
    Il travaille sur des fichiers en entrée. Lesquels ? Sont-ils au bon format ?
    Il produit des fichiers en sortie. Lesquels ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. problème écriture dans texte script tcsh
    Par Yarael dans le forum Linux
    Réponses: 2
    Dernier message: 24/02/2009, 13h58
  2. Composant Form et encodage texte
    Par guy2004 dans le forum Flash
    Réponses: 1
    Dernier message: 15/11/2008, 21h13
  3. Encodage des scripts .m
    Par silver.sax dans le forum MATLAB
    Réponses: 11
    Dernier message: 13/06/2008, 10h57
  4. Encodage text
    Par chikhaoui dans le forum Oracle
    Réponses: 1
    Dernier message: 11/03/2006, 18h35
  5. JavaMail & encodage text/html
    Par mauvais_karma dans le forum Spring
    Réponses: 4
    Dernier message: 25/08/2005, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo