#1 Le 08/12/2006, à 19: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, à 19: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, à 21: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, à 21: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, à 22: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, à 00: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
Dernière modification par kaworu (Le 13/12/2006, à 00:49)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#7 Le 13/12/2006, à 00:47
- bakalegum_
Re : instruction If en bash (ouai et alors 8] )
et bien merci beaucoup pour toutes ces precisions
et pour le petit rajout
Dernière modification par bakalegum_ (Le 13/12/2006, à 00:47)
Hors ligne