[bash] substitution optionnelle

Résolu
sbouli Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 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
A voir également:

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Pas chez moi


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

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

Ni chez moi ;-((

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

Il y a aussi la possibilité que l'erreur est sur une autre ligne.
0
sbouli Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   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
sbouli Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
sbouli Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   2
 
enorme ... pas d'erreur ....

je comprend pas ...

Stéphane
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Du fait la médisance n'est pas si médisante que ça ;-))
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Sinon utilise sed


nom_serveur=$(hostname|sed 's/\./_/') 
echo "nom du serveur : ${nom_serveur}" 
0
sbouli Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
sbouli Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   2
 
oui, je me base bien sur le $? pour le code retour mais on m'avais indiqué $! pour obtenir des infos complémentaires en cas d'erreur au niveau du systeme. dans ce thread : https://forums.commentcamarche.net/forum/affich-18962490-perl-bizarre-retour-de-system#p18975703

mort de rire, c'est toi qui me l'a appris : "Salut,
Mets aussi $! dans ton die, pour voir l'erreur système "

Stéphane
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Entre autre, on dit que si on commence en Perl il faut oublier le shell et vice-versa ;-)
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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