Hello 
@shaks2022 J'ai pu voir dans un autre sujet que tu semblais bien maitriser la ligne de commande, et les scripts bash.
L'idée c'est d'avoir une fonction qui vérifie que la chaine passée en argument est une adresse IP valide, et retourne une valeur :
1 pour "Oui c'est une adresse IP valide"
0 pour "Non, ce n'est pas une adresse IP, ou pas valide".
Cette fonction est appelée par une autre fonction qui va lancer un test iperf3 sur cette adresse IP.
(oui j'aime bien coder des fonctions ^^)
Avec quelques recherches sur le net j'ai trouvé différents codes pour la fonction
Précision, il faut que le code fonctionne dans un shell ZSH et aussi en BASH. Les deux fonctions sont mises dans mon fichier
En fait ce qu'il me faudrait (et qui me manque), c'est la méthode pour récupérer via une regex les valeurs entre les points pour vérifier s'ils ne dépassent pas 254.
Car je ne sais pas faire ça en bash alors que je saurais faire en Powershell XD.
L'idéal serait même de ne pas faire appel à d'autre binaires.
Pour savoir si l'allure de la chaine peut être une adresse IP, j'aurais utilisé ça comme regex :

Ça permet d'éliminer tout ce qui n'est pas 4 groupes de 3 chiffres maxi séparés par des points.
Mais comme j'ai dit précédemment, je ne sais pas utiliser le regex dans les scripts bash.
En écrivant ces lignes, j'ai eu une idée, et une petite recherche plus tard, j'ai trouvé comment vérifier si on a bien 4 groupes de max 3 chiffres séparés par des points :
Me reste encore à trouver comment utiliser les groupes capturés pour en vérifier la valeur.

@shaks2022 J'ai pu voir dans un autre sujet que tu semblais bien maitriser la ligne de commande, et les scripts bash.
L'idée c'est d'avoir une fonction qui vérifie que la chaine passée en argument est une adresse IP valide, et retourne une valeur :
1 pour "Oui c'est une adresse IP valide"
0 pour "Non, ce n'est pas une adresse IP, ou pas valide".
Cette fonction est appelée par une autre fonction qui va lancer un test iperf3 sur cette adresse IP.
(oui j'aime bien coder des fonctions ^^)
Avec quelques recherches sur le net j'ai trouvé différents codes pour la fonction
function valid_ip()
, mais aucun ne fonctionne correctement.
Bash:
function valid_ip()
{
local IP=$1
local stat=1
A=`echo "$IP" | awk '/^([0-2][0-5]{1,3}[.]){3}([0-9]{1,3})$/{print $1}'`
if [ -z $A ]; then
## IP is not correct and A is null/zero.
stat=1
else
## IP address is correct, and returned
stat=0
fi
echo $stat
return $stat # Returns $stat
}
function iperf_both_ways()
{
param_1="$1" # IP du serveur
param_2="$2" # de chaque test
if [ -z "${param_1}" ]; then
echo -e "Aucun paramètre indiqué !\n"
echo -e "\t--> iperf_both_ways < IP > < Durée >\n"
echo -e "\t\tIP = Adresse IP du serveur iperf3\n"
echo -e "\t\tDurée (facultatif) = Durée d'un test, en seconde, par défaut = 10s \n"
return 1
fi
# if [ ! valid_ip $param_1 ]; then
# echo -e "L'adresse IP entrée n'est pas valide : $param_1\n"
# return 1
# fi
if [ -z "${param_2}" ]; then
param_2=20
fi
iperf3 -c $param_1 -t $param_2 && iperf3 -c $param_1 -t $param_2 -R
return 0
}
Précision, il faut que le code fonctionne dans un shell ZSH et aussi en BASH. Les deux fonctions sont mises dans mon fichier
.zshrc
donc sans shebang au début.En fait ce qu'il me faudrait (et qui me manque), c'est la méthode pour récupérer via une regex les valeurs entre les points pour vérifier s'ils ne dépassent pas 254.
Car je ne sais pas faire ça en bash alors que je saurais faire en Powershell XD.
L'idéal serait même de ne pas faire appel à d'autre binaires.
Pour savoir si l'allure de la chaine peut être une adresse IP, j'aurais utilisé ça comme regex :
^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$

Ça permet d'éliminer tout ce qui n'est pas 4 groupes de 3 chiffres maxi séparés par des points.
Mais comme j'ai dit précédemment, je ne sais pas utiliser le regex dans les scripts bash.
En écrivant ces lignes, j'ai eu une idée, et une petite recherche plus tard, j'ai trouvé comment vérifier si on a bien 4 groupes de max 3 chiffres séparés par des points :
Bash:
#!/bin/bash
# Script test.sh
function valid_ip()
{
local IP=$1
local stat=1
if [[ $IP =~ ^([[:digit:]]{1,3})\.([[:digit:]]{1,3})\.([[:digit:]]{1,3})\.([[:digit:]]{1,3})$ ]]; then
## IP is not correct and A is null/zero.
stat=1
msg="$IP is a valid IP !"
else
## IP address is correct, and returned
stat=0
msg="$IP is not a valid IP !"
fi
echo "$stat : $msg"
return $stat # Returns $stat
}
valid_ip $1
result=$?
if [ $result -eq 1 ]; then
exit 0
elif [ $result -eq 0 ]; then
exit 1
fi
Me reste encore à trouver comment utiliser les groupes capturés pour en vérifier la valeur.