Ficher motd.sh de bienvenue avec indication

Bonjour,

Problème de ficher motd.sh qui se lance à chaque connexion ssh ou console :

Le problème est que la partie IP ne fonctionne pas ? (Celui ci fonctionnait sur debian 7 avec une interface reseau eth0 mais pas sur une debian 9 avec une interface ens32 !)

J’ai besoin d’un coup de main

Cordialement

voici le contenu du /etc/profile.d/motd.sh

NOMHOTE=`hostname`
IP=""
list=$(/sbin/ifconfig | grep "ens" | awk '{ print $1}')
for item in $list; do
IP="$IP $(/sbin/ifconfig $item | grep "inet adr" | awk '{ print $2}' | cut -d ":" -f2)"
done

# AFFICHAGE
echo -e "
\033[0;35m++++++++++++++++++++++++: \033[0;37mSYSTEME\033[0;35m :++++++++++++++++++++++++
\033[0;37mNOM        \033[0;35m= \033[1;32m$NOMHOTE
\033[0;37mADRESSE IP \033[0;35m=\033[1;32m$IP
\033[0;35m+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\033[0;37m-----------------------------------------------------------
"

voici ce que me donne la commande ipconfig

root@test:~# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 99.99.99.99  netmask 255.255.255.255  broadcast 99.99.99.98
        inet6 XXXX::XXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x20<link>
        ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)
        RX packets 3564  bytes 408486 (398.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3447  bytes 552917 (539.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Boucle locale)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Il devrait s’afficher en couleur ceci :

++++++++++++++++++++++++: SYSTEME :++++++++++++++++++++++++
NOM        = test
ADRESSE IP = 99.99.99.99
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--------------------------------------------

mais il ne s’affiche que :

++++++++++++++++++++++++: SYSTEME :++++++++++++++++++++++++
NOM        = test
ADRESSE IP = 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--------------------------------------------

salut,

pour motd.sh, je ne sais pas.
par contre, d’un point de vue scripting, ce que tu as écrit est horrible !
HORRIBLEUH ! :smile:

grep | awk | cut

c’est pas possible.

tu devrais utiliser ip :

ip -4 -o a show | awk '/^[0-9]: ens/{print $4}'

c’est plus simple, non ?

1 J'aime

Merci pour ta réponse mais c’est la seule solution que j’avais trouvé pour afficher toutes les adresses ip de machine sous debian 7 possédant deux ou trois adresses ip …

J’ai essayé ta proposition qui devrait donner ça mais ça ne fonctionne pas en cas de multiple adresse ip …

 NOMHOTE=hostname
IP=""
list=$(/sbin/ifconfig | grep "ens" | awk '{ print $1}')
for item in $list; do
IP="$IP $(ip -4 -o a show | awk '/^[0-9]: ens/{print $4}')"
done
$ ip -4 -o a show
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
2: enp1s8    inet 192.168.1.12/24 brd 192.168.1.255 scope global enp1s8\       valid_lft forever preferred_lft forever
3: enp1s9    inet 10.0.0.1/28 brd 10.0.0.15 scope global enp1s9\       valid_lft forever preferred_lft forever

comme on peut le voir (parce que je le montre), sur ma machine, les interfaces sont nommées :
"enp un_nombre s un_nombre"

$ ip -4 -o a show | awk '/^[0-9]: enp/{print $4}'
192.168.1.12/24
10.0.0.1/28

voilà, ça marche très bien.

1 J'aime

Merci c’est super
donc voila la solution finale
mais je n’arrive pas à l’intégrer à mon script
Merci

 NOMHOTE=hostname
 IP=`ip -4 -o a show | awk '/^[0-9]: ens/{print $4}'`
 done
 echo -e "
 \033[0;35m++++++++++++++++++++++++: \033[0;37mSYSTEME\033[0;35m :++++++++++++++++++++++++
 \033[0;37mNOM        \033[0;35m= \033[1;32m$NOMHOTE
 \033[0;37mADRESSE IP \033[0;35m= \033[1;32m$IP
 \033[0;35m+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 \033[0;37m-----------------------------------------------------------
     "

il y a un done en trop.

le script est exécutable ? il possède un shebang ?
que doit-il y avoir d’autre dans ton script ?

bonjour
par contre si je ne mets pas ça : `au debut après le = et à la fin …

IP=ip -4 -o a show | awk '/^[0-9]: ens/{print $4}'

Merci ça fonctionne parfaitement
Un grand merci

ce n’est pas normal.
si il n’y a pas de substitution de commande (les `), ça affiche une erreur (“bash: -4 commande inconnue”, ou quelque chose comme ça), et “$IP” ne contient que “ip”, littéralement. :confused: