[shell]expression réguliere sur parametres réseau

expression réguliere sur parametres réseau [shell] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 17-12-2007 à 08:33:26    

Bonjour, je suis en train d'écrire un script shell qui réécrit le fichier /etc/network/interfaces à partir d'une interface web, j'utilise un shellexec qui lance mon script shell, tout fonctionne, le seul probleme c'est que je doit taper  
adresse ip
masque
réseau
et je voudrais savoir si quelqu'un sait comment je peux obtenir le réseau à partir du masque et de l'adresse ip
normalement
ex
ip         192.168.  1. 1
masque 255.255.255.0
réseau  192.168.  1 .0
 
en gros il faut recopier l'adress ip en méttant des 0 ou il y a 0 dans le masque mais je connait pas la commande à faire sous linux, j'ai testé sed ,  expr et awk mais je n'arrive pas à le faire sans donnée un  nombre de caractere à partir duquel il faut couper, merci de votre aide

Reply

Marsh Posté le 17-12-2007 à 08:33:26   

Reply

Marsh Posté le 17-12-2007 à 09:54:16    

Je vois pas trop comment faire du "et bit à bit", mais tu peux toujours faire une petite fonction qui boucle :

 

#!/bin/sh

 

get_network() {
    local IP=$1
    shift
    local MASK=$1
    shift

 

   for i in $(seq 1 4); do
        iptoken=$(echo "${IP}"     | cut -d '.' -f $i)
        masktoken=$(echo "${MASK}" | cut -d '.' -f $i)
        if [ $masktoken -eq 0 ]; then
            echo -n 0
        else
            echo -n $iptoken
        fi

 

       if [ $i -le 3 ]; then
            echo -n "."
        fi
    done
}

 


IP="192.168.1.45"
MASK="255.255.255.0"

 


get_network $IP $MASK

 
 


bon évidemment c'est tout lent, mais en attendant de trouver mieux tu peux avancer comme ça :o


Message édité par Xavier_OM le 17-12-2007 à 10:01:27

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 17-12-2007 à 09:58:25    

Ben ouais, mais ta boucle ne fonctionne que si son masque est 0 ou 255, sinon le résultat est faux :/
Mais c'est clair qu'en shell, faire un ET logique, c'est moyen quoi [:mouais]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 17-12-2007 à 10:03:19    

wedgeant a écrit :

Ben ouais, mais ta boucle ne fonctionne que si son masque est 0 ou 255, sinon le résultat est faux :/
Mais c'est clair qu'en shell, faire un ET logique, c'est moyen quoi [:mouais]


 
 
oué le masque doit être 0 ou 255.
Sinon on peut gruger et faire un shell script qui appelle un langage de prog plus évolué, genre :
 

ruby <<EOD | sort | uniq -c | sort -n
  Dir['*'].each do |name|
     puts name.split('.',0)[1] || '<null>'
  end
EOD


 
:D


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 17-12-2007 à 10:58:31    

Je vous remercie de toute vos réponse pertinantes, aprés avoir regarder des doc j'ai réaliser le petit script en php c'est beaucoup plus simple merci

Reply

Marsh Posté le 18-12-2007 à 09:49:15    

En shell c'est tout con, tu prend le script de Xavier_OM et tu remplaces simplement le if/else/fi par :

echo -n $(( iptoken & masktoken ))


Oui, on peut manipuler les bits en shell ;)

Reply

Marsh Posté le 18-12-2007 à 09:57:43    

matafan a écrit :

En shell c'est tout con, tu prend le script de Xavier_OM et tu remplaces simplement le if/else/fi par :

echo -n $(( iptoken & masktoken ))


Oui, on peut manipuler les bits en shell ;)


 
 :love:   :hello:


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 19-12-2007 à 00:36:52    

Arf,
 
personne connais ipcalc ou bien ?
 

Code :
  1. ipcalc 192.168.1.1 255.255.255.0 | awk '/Network/ {print $2}'
  2. 192.168.1.0/24


 
 
 
Matafan, peux tu expliquer ta commande ?
 
tu teste succesivement les deux variables ?

Code :
  1. echo -n $(( iptoken & masktoken ))

Reply

Marsh Posté le 19-12-2007 à 10:37:11    

Le "&" dans une expression arithmétique "$(( ... ))" est un "et" bit-à-bit (c'est à dire que le bit "n" du résultat est le et logique des bits "n" des deux opérandes).

Reply

Marsh Posté le 20-12-2007 à 03:01:11    

Oui, moi je me sert de & en bash arythmetique pour verifier 2 conditions.
Mais dans le cas pratique ici, je comprends mal.

Reply

Marsh Posté le 20-12-2007 à 03:01:11   

Reply

Marsh Posté le 20-12-2007 à 05:48:16    

sputnick a écrit :

Oui, moi je me sert de & en bash arythmetique pour verifier 2 conditions.
Mais dans le cas pratique ici, je comprends mal.


ici il sert pour une comparaison bit à bit. Je savais pas que le shell permettait de faire ça [:dawa] perso j'aurai utilisé ipcalc [:cupra]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 20-12-2007 à 09:45:36    

black_lord a écrit :


ici il sert pour une comparaison bit à bit. Je savais pas que le shell permettait de faire ça [:dawa] perso j'aurai utilisé ipcalc [:cupra]


 
Perso jme sers de (( )) assez souvent mais je savais pas pour le bit à bit.
Mais sinon on peut faire ca avec :

# loop conditions.
for ((n=3; n <= $LIMIT; n++))
 
# Setting a value, C-style, with spaces on both sides of the "=".
(( a = 23 ))
 
# Post-increment 'a', C-style.
(( a++ ))
 
# Post-decrement 'a', C-style.
(( a-- ))
 
# Pre-increment 'a', C-style.
(( ++a ))
 
# Pre-decrement 'a', C-style.
(( --a ))
 
# C-style trinary operator.
(( t = a<45?7:11 ))


 
Si ca intéresse qqun...


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed