Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1418 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°991985
stephmoi
Posté le 17-12-2007 à 08:33:26  profilanswer
 

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

mood
Publicité
Posté le 17-12-2007 à 08:33:26  profilanswer
 

n°992005
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 17-12-2007 à 09:54:16  profilanswer
 

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.
n°992007
wedgeant
Da penguin inside
Posté le 17-12-2007 à 09:58:25  profilanswer
 

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
n°992012
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 17-12-2007 à 10:03:19  profilanswer
 

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.
n°992047
stephmoi
Posté le 17-12-2007 à 10:58:31  profilanswer
 

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

n°992486
matafan
Posté le 18-12-2007 à 09:49:15  profilanswer
 

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 ;)

n°992489
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 18-12-2007 à 09:57:43  profilanswer
 

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.
n°992837
sputnick
bip...bip...bip...bip...bi...b
Posté le 19-12-2007 à 00:36:52  profilanswer
 

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 ))

n°992919
matafan
Posté le 19-12-2007 à 10:37:11  profilanswer
 

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).

n°993308
sputnick
bip...bip...bip...bip...bi...b
Posté le 20-12-2007 à 03:01:11  profilanswer
 

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

mood
Publicité
Posté le 20-12-2007 à 03:01:11  profilanswer
 

n°993312
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 20-12-2007 à 05:48:16  profilanswer
 

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
n°993381
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 20-12-2007 à 09:45:36  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
[SHELL] optimisation d'un scriptVirtualBox : réseau
Script Shell condition répertoire vide[Shell - awk] Redirection ">>" écrase le fichier
carte réseau isascript shell qui recherche un mot
shell bash : decouper un mot[AIX 4.3] config carte réseau volatile et Simplex/Duplex
Installation carte USB+carte reseau, pas simpleProbleme partage Disque en reseau [XP]
Plus de sujets relatifs à : [shell]expression réguliere sur parametres réseau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR