[bash] substitution optionnelle

Résolu
sbouli Messages postés 208 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai dans un script bash c'est 2 lignes :

  nom_serveur=$(hostname)  
  nom_serveur=${nom_serveur//\./_}


quand le nom de serveur contient un ou plusieurs point, pas de soucis, les points sont changés en "_" par contre si le nom du serveur (hostname) ne contient pas de ".", j'ai droit à un :

Bad substitution

je pensais pourtant que le remplacement aurait lieu si et seulement si le "." était présent ... existe-il un moyen élégant de transformer la substitution en option ?

Merci pour votre aide !

Stéphane

3 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Pas chez moi

    ~ $ a=blabla
    ~ $ b="bla.bla"
    ~ $ echo $a
    blabla
    ~ $ echo $b
    bla.bla
    ~ $ echo ${b/\./_}
    bla_bla
    ~ $ echo ${a/\./_}
    blabla

    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      Ni chez moi ;-((

      Quel bash ?
      Quel système ?
      0
    2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Il y a aussi la possibilité que l'erreur est sur une autre ligne.
      0
    3. sbouli Messages postés 208 Statut Membre 2
       
      médisant ya le numéro de ligne :)

      bash : GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
      systeme : ubuntu
      # cat /etc/*release*
      DISTRIB_ID=Ubuntu
      DISTRIB_RELEASE=8.04
      DISTRIB_CODENAME=hardy
      DISTRIB_DESCRIPTION="Ubuntu 8.04.4 LTS"

      Stéphane
      0
  2. sbouli Messages postés 208 Statut Membre 2
     
    hello lami20j;

    pas mal ....

    j'ai ajouté un echo pour voir :

     63 nom_serveur=$(hostname)
     64 echo "nom du serveur : ${nom_serveur}\n";
     65 nom_serveur=${nom_serveur//\./_}
    


    et j'ai bien :

    nom du serveur : companysmtp3

    /superchemin/pleindesousrep/script_de_la_mort.sh: 65: Bad substitution

    ....

    comprend pas ...

    Stéphane
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Et dans un terminal, que donne chez toi :

      [jp@MDK-2010 ~]$ nom_serveur=$(hostname)
      [jp@MDK-2010 ~]$ echo $nom_serveur
      MDK-2010
      [jp@MDK-2010 ~]$ nom_serveur=${nom_serveur//\./_}
      [jp@MDK-2010 ~]$ echo $nom_serveur
      MDK-2010
      [jp@MDK-2010 ~]$
      0
    2. sbouli Messages postés 208 Statut Membre 2
       
      enorme ... pas d'erreur ....

      je comprend pas ...

      Stéphane
      0
    3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Du fait la médisance n'est pas si médisante que ça ;-))
      0
    4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Et moi j'ai mis ça dans un script et pas d'erreur non plus.

      Essaie juste ça

      #!/bin/bash 
      nom_serveur=$(hostname) 
      echo "nom du serveur : ${nom_serveur}" 
      nom_serveur=${nom_serveur//\./_} 
      echo $nom_serveur
      0
    5. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Sinon utilise sed


      nom_serveur=$(hostname|sed 's/\./_/') 
      echo "nom du serveur : ${nom_serveur}" 
      0
  3. sbouli Messages postés 208 Statut Membre 2
     
    par contre j'ai cette erreur maintenant :

    $!: unbound variable

    $! n'existe pas en /bin/bash ? pour récupérer l'erreur systeme ?

    Stéphane
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Oui elle existe mais ce n'est pas l'erreur qu'elle contient.
      Le code de retour c'est $?

      Variables spéciales  
      $$   PID du shell courant 
      $!   PID du dernier travail lancé en arrière plan 
      $?   code retour de la dernière commande 
      0
    2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Signaler [PERL] bizarre retour de system
      Oui c'est moi mais c'était pour Perl pas pour shell ;-)))

      Alors là c'est à mon tour de rire ;-))))))
      0
    3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Entre autre, on dit que si on commence en Perl il faut oublier le shell et vice-versa ;-)
      0
    4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Le thread en question il parlait de PERL et non de SHELL (bash ou autre) ;-((

      En shell, le $! renvoie le numéro de PID de la dernière commande lancée en arrière-plan.
      0