Bonjour, comme vous le savez pour certains d’entre vous ,j 'ai un niveau qui se respecte en bash mais je n’ai jamais prétendu être un expert, c’est pourquoi je vais vous exposer mon probleme ; Il s’agit d’un tout petit script qui va me rendre le service de vérifier la connectivité du réseau et contrôler l’état de l’imprimante.
#!/bin/bash
########## donc jarrête mon pare-feu, je lance l'interface qui va communiquer avec l'imprimante#######
systemctl stop nftables.service
interface=$(ip link show | grep ": enp" | awk '{ print $2}' | sed -e "s/://")
ifconfig $interface 192.168.0.141 netmask 255.255.255.0 up
STATUS=$(ip link show | grep ": enp" | awk '{ print $9}');
if [ "$STATUS" == "UP" ]; then
echo "interface UP" #<- la carte réseau est UP c'est cool,
# mais l'imprimante... est-elle allumée ?
else
echo "interface DOWN"
exit 2
fi
filtre=$(echo "global "$interface) #ici je reformule la presentation de l'adresse ip
# de telle façon que je puis déterminer si elle est
IP=$(ip a | grep "$filtre" | cut -d '/' -f1 | cut -d ' ' -f6) # ok
function valid_ip()
{
local IPA1=$1
local stat=1
if [[ $IPA1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];
then
OIFS=$IFS # Save the actual IFS in a var named OIFS
IFS='.' # IFS (Internal Field Separator) set to .
ip=($ip) # ¿Converts $ip into an array saving ip fields on it?
IFS=$OIFS # Restore the old IFS
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] # If $ip[0], $ip[1], $ip[2] and $ip[3] are minor or equal than 255 then
stat=$? # $stat is equal to TRUE if is a valid IP or FALSE if it isn't
fi # End if
return $stat # Returns $stat
}
valid_ip $IP
if [ $? -eq 1 ];then
exit 2
else
echo "IP vérifiée et correcte : $IP"
fi
function pause()
{
read -p "$*"
}
ifconfig
systemctl status nftables
result=$(ping -c1 -I enp4s0 192.168.0.199 | grep "received" | awk -F ' ' '{ print $1 }' );
echo $result
############ C'EST ICI QUE ÇA SE CORSE !!!! LE SIMPLE TEST SUIVANT NE PREND JAMAIS LA VALEUR SOUHAITÉ ET JE NE COMPRENDS PAS POURQUOI !!!
resultat=$(($result)) # <-ai tenté de formater le résultat en chiffre, on sait jamais...
case $resultat in
"1")
echo "OK";;
"0")
echo "NON";;
*)
echo "par défaut";;
esac
ifconfig $interface 192.168.0.141 netmask 255.255.255.0 down
exit 2
→ qu’il se passe c’est quelque soit le test effectué, j’ai essayé avec un if then else fi, idem, on dirait que la valeur lue est « neutre » , comment dire … sans valeur quoi ! du coup dans case , il prend toujours la valeur par defaut que l’imprimante soit allumée ou non.
Il y a dans ce programme quelque chose que j’ignore : est-ce un pb avec bash ? est-ce le traitement du retour du ping ? franchement je ne vois pas !
si qqn a la solution, franchement merci !