Problème de if dans mon script bash

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J’ai récemment mis mon nouveau pc sous Linux et j’aimerai configurer les quelques raccourcis clavier bien pratiques disponibles sur mon clavier comme régler la luminosité. Tout marche parfaitement sauf pour activer/désactiver le wifi où j’ai un problème à l’intérieur de mon script bash.

#!/bin/bash

VAR=$(rfkill -o SOFT,TYPE | grep "wlan")

if [ VAR="débloqué wlan" ]
  then rfkill block wifi
  else rfkill unblock wifi
fi

VAR a 2 valeurs possibles "débloqué wlan" ou "bloqué wlan" suivant si le wifi est actuellement activé ou désactivé. Mon problème est dans le if, si c’est vrai il rentre dans le then mais si c’est faux il ne fait rien. Quelqu’un a une idée d’où vient le problème ? Je vois absolument pas d’où ca vient…

Merci !

+0 -0

Salut,

Il y a deux soucis dans ta condition :

  1. Tu n’utilises pas le symbole $, VAR est donc considérée comme une chaîne littérale ;
  2. VAR="débloqué wlan" est considérée comme une seule expression, qui est toujours vraie.

En fait, la structure if [ condition ] est équivalente à if test condition, test étant une commande permettanrt d’évaluer différentes conditions. Or, comme toute commande, chaque argument doit être séparé par des espaces. Ainsi, test VAR="débloqué wlan" revient à évaluer si l’expression VAR="débloqué wlan" est vraie, ce qui est le cas, ne s’agissant pas d’une chaîne vide.

La condition correcte serait test "${VAR}" = "débloqué wlan" où tu demandes si la première chaîne fournie est égale à la troisième. Ou, avec les crochets : if [ "${VAR}" = "débloqué wlan" ].

+1 -0

Je rajoute un peu mon petit grain de sel.

Pour ce genre de cas, on évite de travailler avec une version locale de la sortie de la commande. On force les locales par défault avant de l’appeler.

VAR=$(LC_ALL=C rfkill -o SOFT,TYPE | grep "wlan")

Et puis ensuite, on utilise "unblocked wlan" plutôt que "débloqué wlan". Mais c’est juste une bonne pratique, ce n’est absolument pas obligatoire. Ton script marche désormais également chez un Italien par exemple.

+2 -0

Merci Taurre ! Ca marche nickel. Et merci Ache pour le conseil ! Concernant le "unblocked wlan", mon ordinateur est en francais et répond donc "débloqué wlan", je suis bien consciente qu’en anglais ce serait mieux pour la portabilité mais pour mon usage personnel, cela me suffit :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte