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

Linux Discussion :

[Red Hat5]Erreur de syntaxe dans mon script


Sujet :

Linux

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Points : 121
    Points
    121
    Par défaut [Red Hat5]Erreur de syntaxe dans mon script
    Bonjour,

    Je travaille avec Linux Redhat5 Enterprise et j'essaye d'exécuter un script que je viens de rédiger.

    Voici le code source:
    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
     
    #!/sbin/sh
    #
    # Copyright (c) 1999 by Sun Microsystems, Inc.
    # All rights reserved.
    #
     
    echo $1 ing oracle..
    case "$1" in
    start)
            su - oracle -c "sh /u01/app/oracle/bin/on_boot"
            ;;
    stop)
            su - oracle -c "sh /u01/app/oracle/bin/on_shutdown"
            ;;
    *)
            echo "Usage: $0 {start|stop}"
            exit 1
            ;;
    esac
    echo .. done.
    exit 0
    Mon script s'appelle oracle est est bien en exécutable.

    Lorsque j'essaye de l'exécuter en tapant la commande:

    J'obtiens cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [root@gigsrv rc.d]# sh oracle stop
    : command not found
    stop ing oracle..
    'racle: line 8: syntax error near unexpected token `in
    'racle: line 8: `case "$1" in
    Quelqu'un a-t-il une idée?

    Merci d'avance

    Michaël

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    "sh" ne serait pas un csh sur ta machine ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par matafan Voir le message
    "sh" ne serait pas un csh sur ta machine ?
    si ch me permet d'exécuter des fichiers exécutables de mon shell

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Oui mais ton script en l'occurrence c'est du shell POSIX, pas du csh. Exécute-le avec bash ou un autre shell POSIX.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mika0102 Voir le message
    Lorsque j'essaye de l'exécuter en tapant la commande:

    Tente de l'appeler sans spécifier dans quel shell tu le lances (laisse le système se débrouiller)

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Tente de l'appeler sans spécifier dans quel shell tu le lances (laisse le système se débrouiller)
    Bonjour,

    J'ai essayé mais voici le message que je reçois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [root@gigsrv rc.d]# ./oracle stop
    -bash: ./oracle: /sbin/sh^M: bad interpreter: No such file or directory

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Deux choses :

    - Apparemment tu as créé ton script sous Windows. Il faut convertir les retours à la ligne au format Unix (avec dos2unix par exemple).

    - sh n'est probablement pas sous /usr/sbin, mais sous /bin ou /usr/bin

    Ensuite, une fois les retours à la ligne corrigés, essaie d'exécuter ton script avec "bash oracle stop"

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par matafan Voir le message
    Deux choses :

    - Apparemment tu as créé ton script sous Windows. Il faut convertir les retours à la ligne au format Unix (avec dos2unix par exemple).

    - sh n'est probablement pas sous /usr/sbin, mais sous /bin ou /usr/bin

    Ensuite, une fois les retours à la ligne corrigés, essaie d'exécuter ton script avec "bash oracle stop"
    C'est parfait, je viens de recopier le script dans un nouveau fichier créé avec l'éditeur VI et celui-ci tourne maintenant parfaitement.
    Une dernière question avant que je ne clôture cette discussion avec le tag [RESOLU], comment puis-je faire pour que ce script se lance au boot du serveur?

    Ce script sert à démarrer ma base de données oracle, le listener et la console d'admin donc cela serait mieux si tout ce beau monde re-démarrait automatiquement.

    Merci d'avance

    Michaël

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mika0102 Voir le message
    C'est parfait, je viens de recopier le script dans un nouveau fichier créé avec l'éditeur VI et celui-ci tourne maintenant parfaitement.
    Oui. Fais gaffe quand tu importes des scripts écrits sur Windows. Le format "texte" est un peu différent d'où la fameuse option text/binary utilisée dans ftp indiquant qu'on veut ou qu'on ne veut pas de conversion du format lors des transferts d'un monde vers l'autre. Quand je pense que toute cette merde est arrivé parce que 2 types n'ont pas réussi à se mettre d'accord il y a 40 ans ça laisse rêveur...

    Citation Envoyé par mika0102 Voir le message
    Une dernière question avant que je ne clôture cette discussion avec le tag [RESOLU], comment puis-je faire pour que ce script se lance au boot du serveur?
    Il te faut pour ça comprendre le fonctionnement de "init.d" et "rcX.d"

    Le démarrage de la machine est géré par /etc/inittab et les dossiers /etc/init.d et /etc/rcX.d (X représentant un chiffre compris entre 1 et 5)

    Un système Unix/Linux possède 7 niveaux de démarage
    - niveau 0 => arrêt de la machine
    - niveau 1 => mode de maintenance
    - niveau 2 => maintenance avec réseau activé
    - niveau 3 => démarrage normal
    - niveau 4 => pas utilisé
    - niveau 5 => démarrage normal en mode graphique
    - niveau 6 => reboot
    Le niveau est défini dans le fichier /etc/inittab. C'est la ligne "id:X:initdefault", le "X" indiquant dans quel mode ta machine démarrera quand tu l'allumeras. Il vaut mieux éviter de mettre 0 ou 6 à cet endroit...

    Accessoirement tu peux connaitre ton niveau actuel avec la commande "runlevel". Et tu peux changer de niveau en tapant la commande "init X".

    Donc tu as déjà une première approche de la façon dont est géré le démarrage. Ensuite, il faut savoir qu'à chaque niveau "X" correspond un répertoire "rcX.d". Au niveau 3 correspondra le répertoire "rc3.d". Et au niveau 5 correspondra le répertoire "rc5.d".
    Ainsi chaque répertoire "rcX.d" est associé au niveau. Et chacun de ces répertoires contient tous les scripts qui doivent être exécutés pour le niveau en question.

    Ces scripts sont exprimés de 2 façons
    - un nom Sxx => S signifiant "Start" => le script est lancé avec le mot clef "start" quand le système entre dans le niveau
    - un nom Kxx => K signifiant "Kill" => le script est lancé avec le mot clef "stop" quand le système quitte le niveau
    Les valeurs "xx" étant juste une façon d'ordonner les scripts. Le S01 sera lancé avant le S02 et le K55 sera lancé avant le K56.

    Ainsi, si tu veux faire en sorte que ton script se lance au démarrage de ta machine, il te faut
    - connaitre dans quel niveau "X" démarre ta machine
    - mettre le script dans le dossier "rcX.d" en le nommant "SxxNomQueTuVeux"

    Et si tu veux que le script s'arrête quand tu quittes le niveau (généralement quand tu arrêtes la machine, tu quittes le niveau X pour rentrer dans le niveau 0) il te faut
    - connaitre encore dans quel niveau "X" tu te trouves
    - mettre le script dans le dossier "rcX.d" en le nommant "KxxNomQueTuVeux"

    Tu remarqueras que comme t'as 5 niveaux de "travail", si tu veux que ton script soit actif pour chaque niveau, il te faut le mettre dans chacun des rc1.d, rc2.d, rc3.d, rc4. et rc5.d ce qui induit une lourde charge de maintenance.
    C'est là qu'intervient le dossier "init.d". Il te suffit, pour éviter la duplication des scripts, de mettre ton script dans le dossier "init.d" et de mettre des liens vers ce script dans chacun des dossiers "rcX.d" en nommant ces liens "Sxx" pour un démarrage ou "Kxx" pour un arrêt. Ton script n'est donc physiquement qu'à un seul endroit et les autres noms pointent vers cet endroit. Si tu veux faire évoluer le script, tu ne fais évoluer que le script physique et l'évolution sera automatiquement prise en compte dans les liens situés dans les dossiers "rcX.d".

    Et donc voilà comment on peut automatiser assez simplement un lancement ou un arrêt d'un script au démarrage ou à l'arrêt de la machine.

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 217
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Oui. Fais gaffe quand tu importes des scripts écrits sur Windows. Le format "texte" est un peu différent d'où la fameuse option text/binary utilisée dans ftp indiquant qu'on veut ou qu'on ne veut pas de conversion du format lors des transferts d'un monde vers l'autre. Quand je pense que toute cette merde est arrivé parce que 2 types n'ont pas réussi à se mettre d'accord il y a 40 ans ça laisse rêveur...


    Il te faut pour ça comprendre le fonctionnement de "init.d" et "rcX.d"

    Le démarrage de la machine est géré par /etc/inittab et les dossiers /etc/init.d et /etc/rcX.d (X représentant un chiffre compris entre 1 et 5)

    Un système Unix/Linux possède 7 niveaux de démarage
    - niveau 0 => arrêt de la machine
    - niveau 1 => mode de maintenance
    - niveau 2 => maintenance avec réseau activé
    - niveau 3 => démarrage normal
    - niveau 4 => pas utilisé
    - niveau 5 => démarrage normal en mode graphique
    - niveau 6 => reboot
    Le niveau est défini dans le fichier /etc/inittab. C'est la ligne "id:X:initdefault", le "X" indiquant dans quel mode ta machine démarrera quand tu l'allumeras. Il vaut mieux éviter de mettre 0 ou 6 à cet endroit...

    Accessoirement tu peux connaitre ton niveau actuel avec la commande "runlevel". Et tu peux changer de niveau en tapant la commande "init X".

    Donc tu as déjà une première approche de la façon dont est géré le démarrage. Ensuite, il faut savoir qu'à chaque niveau "X" correspond un répertoire "rcX.d". Au niveau 3 correspondra le répertoire "rc3.d". Et au niveau 5 correspondra le répertoire "rc5.d".
    Ainsi chaque répertoire "rcX.d" est associé au niveau. Et chacun de ces répertoires contient tous les scripts qui doivent être exécutés pour le niveau en question.

    Ces scripts sont exprimés de 2 façons
    - un nom Sxx => S signifiant "Start" => le script est lancé avec le mot clef "start" quand le système entre dans le niveau
    - un nom Kxx => K signifiant "Kill" => le script est lancé avec le mot clef "stop" quand le système quitte le niveau
    Les valeurs "xx" étant juste une façon d'ordonner les scripts. Le S01 sera lancé avant le S02 et le K55 sera lancé avant le K56.

    Ainsi, si tu veux faire en sorte que ton script se lance au démarrage de ta machine, il te faut
    - connaitre dans quel niveau "X" démarre ta machine
    - mettre le script dans le dossier "rcX.d" en le nommant "SxxNomQueTuVeux"

    Et si tu veux que le script s'arrête quand tu quittes le niveau (généralement quand tu arrêtes la machine, tu quittes le niveau X pour rentrer dans le niveau 0) il te faut
    - connaitre encore dans quel niveau "X" tu te trouves
    - mettre le script dans le dossier "rcX.d" en le nommant "KxxNomQueTuVeux"

    Tu remarqueras que comme t'as 5 niveaux de "travail", si tu veux que ton script soit actif pour chaque niveau, il te faut le mettre dans chacun des rc1.d, rc2.d, rc3.d, rc4. et rc5.d ce qui induit une lourde charge de maintenance.
    C'est là qu'intervient le dossier "init.d". Il te suffit, pour éviter la duplication des scripts, de mettre ton script dans le dossier "init.d" et de mettre des liens vers ce script dans chacun des dossiers "rcX.d" en nommant ces liens "Sxx" pour un démarrage ou "Kxx" pour un arrêt. Ton script n'est donc physiquement qu'à un seul endroit et les autres noms pointent vers cet endroit. Si tu veux faire évoluer le script, tu ne fais évoluer que le script physique et l'évolution sera automatiquement prise en compte dans les liens situés dans les dossiers "rcX.d".

    Et donc voilà comment on peut automatiser assez simplement un lancement ou un arrêt d'un script au démarrage ou à l'arrêt de la machine.
    Merci pour cette réponse ultra-complète, je vais donc suivre cela pour l'exécution de mon script.
    Je pense que je peux dire que ce post est résolu.

    A+

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

Discussions similaires

  1. Erreur de syntaxe dans mon code (pas facile à trouver)
    Par beegees dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/01/2010, 07h42
  2. erreur de syntaxe dans mon inner join
    Par polo86 dans le forum Requêtes
    Réponses: 6
    Dernier message: 26/03/2009, 17h45
  3. Erreur de syntaxe dans un script VBS
    Par metatron dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 11/03/2009, 12h18
  4. [phpMyAdmin] Erreur de syntaxe dans mon script de création
    Par piotrr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 18/08/2008, 15h45
  5. [XML] Rss, erreur de syntaxe dans mon flux?
    Par Soten dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/04/2007, 09h02

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