Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/03/2012, à 22:19

Bybeu

Logique floue... ou je suis con?

-n != !-z ???? Autrement dit A != !!A    roll C'est Broadway!


Le ouaibe; et re-écrit < a écrit :

...
-n STRING
          the length of STRING is nonzero

       STRING equivalent to -n STRING

       -z STRING
          the length of STRING is zero
....

Alors moi, :

BusyBox v1.01 (2010.08.29-10:07+0000) Built-in shell (ash)
root@Home:/etc/init.d# cat test
if [ ! -z `nvram get ff_pubkey | cut -c1-7` ]; then
echo $?
echo BEGIN`nvram get ff_pubkey | cut -c1-7`END
echo "not empty"
else
echo $?                               
echo BEGIN`nvram get ff_pubkey | cut -c1-7`END
echo "empty"
fi
root@Home:/etc/init.d# ./test
1
BEGINEND
empty
.......minute, je vais bricoler dans le GUI.....
....hop me revoilou:
root@Home:/etc/init.d# ./test
0
BEGINssh-rsaEND
not empty

Cool, mais...

root@Home:/etc/init.d# cat test
if [ -n `nvram get ff_pubkey | cut -c1-7` ]; then
echo $?
echo BEGIN`nvram get ff_pubkey | cut -c1-7`END
echo "not empty"
else
echo $?                               
echo BEGIN`nvram get ff_pubkey | cut -c1-7`END
echo "empty"
fi
root@Home:/etc/init.d# ./test
0
BEGINssh-rsaEND
not empty
.......minute, je te dis.....
....tu vois, ça blinde:
root@Home:/etc/init.d# ./test
0
BEGINEND
not empty

hmm

Pourtant:

root@Home:~# KEY=`nvram get ff_pubkey | cut -c1-7`
root@Home:~# echo "${#KEY}"
7
root@Home:~# echo $KEY
ssh-rsa
....laisse béton le GUI:
nvram set ff_pubkey=""
nvram commit
root@Home:~# KEY=`nvram get ff_pubkey | cut -c1-7`
root@Home:~# echo "${#KEY}"
0
root@Home:~# echo $KEY

root@Home:~# 

Ça vaut le coup que je poste cette guignolade sur busybox.net, les gô, ou je vais passer pour un ?

Dernière modification par Bybeu (Le 04/03/2012, à 22:25)

Hors ligne

#2 Le 05/03/2012, à 00:19

Bousky

Re : Logique floue... ou je suis con?

Tu as essayé avec des guillemets doubles ?

[ -n "`nvram get ff_pubkey | cut -c1-7`" ]

Un petit test :

$ [ -n "" ] ; echo $?
1
$ [ -z "" ] ; echo $?
0
$ [ -n ] ; echo $?
0
$ [ -z ] ; echo $?
0

Tu testes ça en root !?


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#3 Le 05/03/2012, à 17:58

Postmortem

Re : Logique floue... ou je suis con?

Salut,
Je tente une explication !
Tu devrais faire tes tests avec [[ ... ]] plutôt que [ ... ].
Avec [[ ... ]], le shell compte les mots avant de faire les substitutions (il n'y a pas de découpage après les substitutions lorsque l'on est entre les double-crochets). Donc, dans le test suivant :

[[ -n `nvram get ff_pubkey | cut -c1-7` ]]

Le shell voit 2 mots :

  • -n : test d'une chaîne non vide

  • `nvram get ff_pubkey | cut -c1-7` : la chaîne qui sera testée et donc, si le résultat est vide, le test est faux.

Dans le cas du test avec un seul crochet, les substitutions sont effectuées puis le découpage en mot est effectué.
Si le résultat de `nvram get ff_pubkey | cut -c1-7` est vide, il est purement supprimé vu qu'il n'est pas entre double-quotes.
On se retrouve à tester ceci :

[ -n ]

La commande test ne voit qu'un seul mot : -n
Cela équivaut donc à faire ce test :

[ -n "-n" ]

La chaîne -n n'étant pas la chaîne vide, le résultat renvoyé est vrai.
Lorsque tu utilises les simple crochets, il faut utiliser des quotes, ainsi, si le résultat de la substitutions est vide, la chaîne vide est gardée explicitement. Cela évite aussi les soucis si le résustat de la substitution contient des espaces.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#4 Le 14/03/2012, à 17:17

Bybeu

Re : Logique floue... ou je suis con?

Merci les gô, pour l'explication. Si j'avais compris les mans de test, ha làlà.
Ça m'étonnait aussi qu'un truc aussi énaurmeuh ait pu passer inaperçu!

PS: le cut -c1-7, c'était juste pour filtrer les erreurs quand la chaîne en nvram n'était pas vide (longue clé rsa avec des caractères spéciaux). Je vais retenter avec votre recette, et ce coup-là je parie que ça va gazer, et même sans le cut! ... je me demande quand-même comment ça réagirait s'il rencontre des ` des [], des ' et autre {} "... dans la chaîne rsa?

Merci encore.

Byebye

Dernière modification par Bybeu (Le 14/03/2012, à 17:18)

Hors ligne