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 08/12/2006, à 20:21

bakalegum_

instruction If en bash (ouai et alors 8] )

bonjour a tous,
bon vous allez vite voir que je debut en bash, j ai reussi a faire ce que je voulai mais je sent que c est pas genial ( je crois que c est un euphemisme)

alors voila voici quelques lignes d exemples

   nature $A
   return_nature_source=$?

un=1


   if [[ "$return_nature_source" -eq "$un" ]] ; then
echo "source NON"
   else
echo "source OK"
#echo $return_nature_source
   fi

donc la fonction nature me dit si le chemin A est valide ou pas renvoi 1 0 OU 3,(valide si 0 ou 3 , pas valide si 1)... et donc je nai pas reussi a faire autrement qu en creant une variable un , pour la comparer, je pense avoir testé beucoup de choses en combinant plus ou moins tout ce que j ai pu lire, sans succés.

donc si une ame charitable pouvait m eclairer

merci d avance

bakalegum

Hors ligne

#2 Le 08/12/2006, à 20:54

abetsic

Re : instruction If en bash (ouai et alors 8] )

Bonsoir,
[ -f fichier ] pour tester un fichier
[ d repertoire ] pour un repertoire

pour tout le reste "man test"

Hors ligne

#3 Le 08/12/2006, à 22:04

bakalegum_

Re : instruction If en bash (ouai et alors 8] )

bonsoir,
merci de la reponse
en fait j utilise deja cela dans la fontion nature.. et c est ca valeur de retour que je veux tester ( ce n est surement pas le plus rapide, ni le plus optimisé mais bon..)

en fait je ne comprend pas pourquoi je ne peux pas remplacer

if [[ "$return_nature_source" -eq "$un" ]] ; then

par

if [[ "$return_nature_source" == 1 ]] ; then

ou bien [ "$return_nature_source" == 1 ] ou encore [ $return_nature_source == 1 ] ...

voila le tuto que je suis en train de lire
http://abs.traduc.org/abs-4.1-fr/ch07.html mais je n y trouve pas mon bonheur...

Hors ligne

#4 Le 08/12/2006, à 22:20

abetsic

Re : instruction If en bash (ouai et alors 8] )

tu devrais pouvoir le remplacer par
if [ $return_nature_source -eq 1 ]

Hors ligne

#5 Le 08/12/2006, à 23:25

bakalegum_

Re : instruction If en bash (ouai et alors 8] )

niquel ca marche.. bon maintenat je vais essayer de reduire mon code, je vais pouvoir reduire au moins de moitier mon script

merci beaucoup

Hors ligne

#6 Le 13/12/2006, à 01:40

kaworu

Re : instruction If en bash (ouai et alors 8] )

Salut !
évite [[ au profit de [ pour deux raisons :
bash utilise [ , c'est plus courant et c'est une fonction interne de bash (contrairement à [[ qui est une fonction externe). C'est donc plus portable et performant d'utiliser [.
[ est un programme (comme test) qui attend des arguments et dont le dernier doit être "]"

Quand tu test des nombres, tu peux faire

 
[ $nombre -gt 1 ] && [ $nombre -ne 2 ]

ce qui reviens à dire $nombre plus grand que 1 mais pas égal à deux.
pas de guillemets, et opérateurs en lettres (gt pour gretter-than, lt pour lesser-than, eq pour equals et ne pour not-eq).

Si c'est des chaines de charactère que tu test, il faut des guillement et des opérateurs en "symboles"
[ "$string" == "foo" ] || [ "$string" != "bar" ]

la solution avec des chaines marchera même si c'est des nombres, par contre le >= et <= ne sont pas fiables, car c'est une comparaison littéral

if [ "8" > "10" ]; then echo true
else echo false
fi
# donne TRUE car en ASCII "8" est plus grand que "1"

if [ 8 -gt 10 ]; then echo true
else echo false
fi 
# donne false car là la comparaison est ok

En résumé :
utilise la solution 1 seulement quand tu est sûr que ta variable est un nombre ou quand tu as besoin de > ou <. Autrement la 2ème est plus souple et passe-partout wink

Dernière modification par kaworu (Le 13/12/2006, à 01:49)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#7 Le 13/12/2006, à 01:47

bakalegum_

Re : instruction If en bash (ouai et alors 8] )

et bien merci beaucoup pour toutes ces precisions smile

et pour le petit rajout smile

Dernière modification par bakalegum_ (Le 13/12/2006, à 01:47)

Hors ligne