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 POSIX Discussion :

Script ksh qui me rend fou [KSH]


Sujet :

Shell et commandes POSIX

  1. #1
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut Script ksh qui me rend fou
    Bonjour,

    je suis en train de debugger un script qui est codé en ksh. Ce script vérifie s'il existe dans un répertoire, un ou plusieurs fichiers qui ne sont pas égal à 0:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/ksh
     
    if [ -s /data/${USER}/log* ]
    then
            fichier=$(ls /data/${USER}/log*|cut -d"/" -f6)
            print $fichier
    else
            print "no files found"
    fi
    Ce qui m'étonne c'est que le script fonctionnait bien jusqu'au 11 août, e depuis, j'ai une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ./check_files.sh 
    ./check_files[10]: [: /data/root/log-2013-08-12: unexpected operator/operand
    no files found
    Je n'arrive pas à comprendre ce qui a changé, d'autant plus que d'autres scripts sur la même machine utilisent la même condition if.

    j'espère que vous pourrez me filer un coup de main.

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    pourquoi pas juste faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /chemin/rep/ -type f -size +1 | #traitement...
    déjà ça t'évites de gérer le cas où il n'y a rien à traiter... et surtout ça c'est plus sur et propre qu'un ls en plein script...

  3. #3
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    en fait j'ai déjà pensé au find. mais le souci c'est que le reste du script utilise le résultat du ls.

    Ce sont des scripts récupérés. Et vu la taille du script, je ne voudrai pas me retrouver à re-coder l'ensemble du script. ca me prendrai un temps fou et en plus il faudrait que je fasse des tests de charge et de perf. la galère quoi ...

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

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

    KSH ? mais lequel ?


    peut-être qu'avant il n'y avait pas, ou alors qu'un seul fichier, et que depuis il y en a plusieurs, et donc le développement de l'astérisque fait échouer le test
    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    test fichier* = test fichier1 fichier2
    ...
    ?

    utilise un tableau et une boucle pour itérer sur ce tableau.


    deux petites choses :
    • ON N'UTILISE PAS ls DANS UN SCRIPT !!!
    • donner une extension .sh à un script qui n'est pas en sh n'a pas de sens.


    tu devrais peut-être le réécrire proprement.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par zerros Voir le message
    en fait j'ai déjà pensé au find. mais le souci c'est que le reste du script utilise le résultat du ls.

    Ce sont des scripts récupérés. Et vu la taille du script, je ne voudrai pas me retrouver à re-coder l'ensemble du script. ca me prendrai un temps fou et en plus il faudrait que je fasse des tests de charge et de perf. la galère quoi ...
    si il était pas codé avec les pieds à la base... ça arriverai pas ...
    et non il faut pas refaire le script
    faut juste soit tout metre dans une fonction et l'appeler avec le exec du find ou utiliser le
    find.....| fonction
    ou find.....| traitement




    et puis :
    deux petites choses :

    ON N'UTILISE PAS ls DANS UN SCRIPT !!!
    donner une extension .sh à un script qui n'est pas en sh n'a pas de sens.


    tu devrais peut-être le réécrire proprement.
    de plus question test de perf tu peux t'en passer parce qu'échanger un ls par un find ou mieux encore par des traitements plus intelligents en fontion du besoin réel, sera d'autant plus "beaucoup plus meilleur" que tu auras un grand nombre de gros fichiers à traiter.

  6. #6
    Membre habitué
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Points : 159
    Points
    159
    Par défaut
    oui, je sais tout ça ..... mais je dis juste que je suis obligé de suivre une procédure avant de mettre en place le nouveau script, et ça prend du temps.

    Bon, j'ai fini par refaire une fonction qui fais la recherche des fichiers avec des find et qui renvoi au programme principal. Du coup, j'ai juste eu à virer les ls pour apeller la fonction.

    Voilà. ça fonctionne et le problème est résolu. je vais en parallèle lancer une demande de validation du script en urgence.

    Merci pour votre aide

  7. #7
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bon pour l'extension c'est quand même pas bien grave non plus

    Perso, je met également des .sh partout et jamais rencontré de ".bash" ou autres malgré l'utilisation courante de ce type de technos. L'extension me sert juste à distinguer les traitements shell des autres type de fichiers (java, php ou autres).

    /ME s'attend au coup de fouet

  8. #8
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    /ME s'attend au coup de fouet

    si tu demande .... on te l'offre...

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Toi aussi tu met une extension pour chaque type de shell utilisé ?

    D'ailleurs il m'est déjà arrivé de passer des scripts sous bash qui étaient à la base sous SH pour pouvoir profiter des évolutions de bash. Le fait de garder la même extension a permis de limiter les impacts. Si j'avais du changer l'extension ou la retirer, j'aurais été obligé de modifier les scripts appelants, de les relivrer, ... bon bref le sujet n'est pas là

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Citation Envoyé par ok.Idriss
    Le fait de garder la même extension a permis de limiter les impacts
    tu n'aurais pas mis d'extension, t'aurais pas été plus enquiquiné !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Certes mais l'extension .sh permet aussi la coloration syntaxique du premier coup avec bon nombre de logiciels (sans avoir à changer la conf)


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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Mes fichiers commençant par #!/bin/sed s'appellent atartes.sed
    Mes fichiers commençant par #!/usr/bin/awk sappellent teuze.awk

    Comme l'exprime N_BaH, les extensions sont facultatives. Autant être clair.


    PS: Chercher une discussion déplacée sans être abonné peut être rock'n'roll.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SDL_SetAlpha et transparence qui me rend fou
    Par nightwar dans le forum SDL
    Réponses: 5
    Dernier message: 31/03/2010, 21h31
  2. Problème de Syntaxe qui me rend fou
    Par fardon57 dans le forum Débuter
    Réponses: 2
    Dernier message: 07/12/2009, 10h57
  3. une exception qui me rend fou !
    Par ghilo dans le forum Langage
    Réponses: 5
    Dernier message: 20/08/2009, 16h48
  4. SOS - Une Association Many-To-Many qui me rend fou
    Par NexoFlex dans le forum Hibernate
    Réponses: 2
    Dernier message: 30/06/2009, 18h09
  5. Script CMD qui ne rend pas la main
    Par ipeteivince dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 10/06/2005, 11h00

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