Conditions en bash

Conditions en bash - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 18-02-2006 à 16:25:18    

Bonjour  :hello:  
J'ai codé un petit script pour rentrer les informations sur les stations d'un réseau (que je dirige vers un fichier texte). C'est très trivial pour l'instant, mais j'aimerai rajouter quelques fonctionnalités :)
 
En gros, un exemple du code :
 

Citation :

echo "Entrez l'adresse mac de la station"
read macstation


 
Cependant, j'aimerai vérifier que l'adresse mac rentrée est bien du type "xx:xx:xx:xx:xx:xx" :)
C'est a dire sans espaces à la fin, et bien deux caracteres apparié séparé par deux point. Sans oublier bien sur qu'il m'en faut exactement 12 (17 au total en comptant les ':') Peu m'importe de vérifier si ces caractère sont bien hexa.
 
Merci.
 
P.S : je sais pas comment compter le nombre de caracteres entrées, et en plus les while que j'ai utilisés ne marchent pas :(


Message édité par Plam le 18-02-2006 à 16:26:55
Reply

Marsh Posté le 18-02-2006 à 16:25:18   

Reply

Marsh Posté le 18-02-2006 à 17:09:49    

#!/bin/sh
 
echo -n "Entres l'adresse mac de la station: "
read mac
 
if echo $mac | grep -qvE '^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$'
then
        echo "Adresse invalide"
fi

Reply

Marsh Posté le 18-02-2006 à 17:43:18    

:ouch:
Pourrait tu m'expliquer en gros ce qui se passe apres le grep :??:
Je cherche a faire un while pour qu'il me demande l'adresse tant qu'elle est pas bonne :)
Donc il faut que je traduise le "if" en while :)
Je m'y essaye de ce pas :)

Reply

Marsh Posté le 18-02-2006 à 17:48:08    

Ca marche !!!!
Merci :D
:hello:

Reply

Marsh Posté le 18-02-2006 à 17:49:54    

Erf faut que je rajoute en cas de vide :(
 
edit : ah non bizarre  :heink:  
Ca a marché une fois avec un vide mais plus maintenant  :heink:


Message édité par Plam le 18-02-2006 à 17:52:46
Reply

Marsh Posté le 18-02-2006 à 18:37:18    

:hello:  Tu postera ton code, une fois terminé ?

Reply

Marsh Posté le 19-02-2006 à 05:00:12    

La regexp du grep match les chaines qui contiennent 5 groupes ({5}) de deux ({2}) caractères alphanumériques ([0-9a-fA-F]) suivis d'un ":", suivis d'un groupe de deux caractères alphanumériques. Le ^ veut dire début de chaîne, et le $ fin de chaîne.

Reply

Marsh Posté le 20-02-2006 à 18:48:01    

treolar a écrit :

:hello:  Tu postera ton code, une fois terminé ?


 
En gros, ça me sert à stocker 'temporairement' les informations sur un point d'accès (elles seront réutilisés par d'autres scripts).
Le temporaire "propre" écrasé à chaque fois est "AP.txt". Celui qui recense tous les AP stocké s'appelle APKC.txt  
 

Citation :

echo "Nom AP ?"
echo "Attention ! Si espace, mettre ' ' à la place !"
read nomap
echo "MAC AP ?"
read macap
while echo $macap | grep -qvE '^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$'
do echo "Adresse AP invalide. Recommencez !"
read macap
done
echo "MAC Station connecté à l'AP ?"
read macst
while echo $macst | grep -qvE '^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$'
do echo "Adresse Station invalide. Recommencez !"
read macst
done
echo "$nomap // $macap // $macst
 
" >>APKC.txt
echo "$nomap/$macap/$macst" > AP.txt

Reply

Marsh Posté le 20-02-2006 à 18:50:24    

Ensuite, j'utilise ce fichier pour me générer les lignes voulue. Par exemple, des commandes sur aireplay, c'est bien trop long.
Donc ce qui est écris dans ce fichier est repris par ça part exemple :
 

Citation :


echo "________________________________________________________________"
nomap1=$(cat AP.txt | cut -d "/" -f1)
macap1=$(cat AP.txt | cut -d "/" -f2)
macst1=$(cat AP.txt | cut -d "/" -f3)
echo "La commande à copier pour l'association est :"
echo aireplay -1 0 -e $nomap1 -a $macap1 -b $macap1 -h $macst1 ath0
echo " "
echo "La commande à copier pour l'injection est :"
echo aireplay -3 -b $macap1 -h $macst1 -x 600 -r out-0$ncap.cap ath0


 
D'où l'interet de pas recopier n'importe quoi !
Le cat permet de prendre dans le fichier, ce qui m'évite de rettaper le SSID, l'adresse MAC du point d'acces et de sa station associée !
 
Je précise que j'utilise ça dans un cadre légal :)

Reply

Marsh Posté le 20-02-2006 à 18:55:42    

D'ailleur si j'affiche la commande avec echo, sans l'executer directement, c'est que ça marche pas d'y aller directement (par exemple, mettre juste le code de l'injection).  
En fait je crois qu'il considere les autres echo plus haut comme le début du code et donc aireplay ne pige pas les parametres. Il me faudrait une commande pour afficher le résultat "proprement" (sans rien avant).
Tiens en tapant, je me demande ce que donnerai un clear :??:
 
edit : ben non marche pas non plus  :sweat:


Message édité par Plam le 20-02-2006 à 19:01:34
Reply

Marsh Posté le 20-02-2006 à 18:55:42   

Reply

Marsh Posté le 21-02-2006 à 04:15:07    

Je n'ai pas compris ce qui ne marche pas. Ca fait quoi exactement si tu enlève simplement les "echo" qui sont devant les "aireplay" ?

Reply

Marsh Posté le 21-02-2006 à 07:07:34    

matafan a écrit :

Je n'ai pas compris ce qui ne marche pas. Ca fait quoi exactement si tu enlève simplement les "echo" qui sont devant les "aireplay" ?


 
 
et bien tous d'abord je ne vois pas la ligne de commande car elle est executé de suite (ça encore c'est pas un probleme)
Ensuite, le logiciel aireplay lance une suite de parametre a mettre (comme quand c'est mal tapé, genre il manque un parametre etc.) => comme une aide en gros.
Alors que le code que je copie colle marche parfaitement [:spamafote]

Reply

Marsh Posté le 21-02-2006 à 13:03:15    

Plam a écrit :

En gros, ça me sert à stocker 'temporairement' les informations sur un point d'accès (elles seront réutilisés par d'autres scripts).
Le temporaire "propre" écrasé à chaque fois est "AP.txt". Celui qui recense tous les AP stocké s'appelle APKC.txt  
...


 
Merci :)

Message cité 1 fois
Message édité par treolar le 21-02-2006 à 13:03:38
Reply

Marsh Posté le 21-02-2006 à 14:03:28    


 
mais de rien :D

Reply

Sujets relatifs:

Leave a Replay

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