Test sur boolean et autre condtion
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je ne comprends pas pourquoi ce test me retourne toujours "absolu" :
(note : remplacer Desktop par un nom de dossier adéquat si nécessaire)
Explications : je dois tester si un paramètre passé en argument à un script bash est un chemin :
1) existant, ce serait pas mal...
2) et s'il existe, je dois tester s'il est absolu ou relatif.
En gros, je bûche sur mon test if ; je n'arrive pas à tester à la fois si $chemin est un dossier, et tester un boolean. Je m'y prends sans doute mal dans ce deuxième cas.
Merci ! ;)
Je ne comprends pas pourquoi ce test me retourne toujours "absolu" :
(note : remplacer Desktop par un nom de dossier adéquat si nécessaire)
#!/bin/bash chemin="Desktop" case "${chemin}" in /*) absolute=1 ;; *) absolute=0 ;; esac if [[ -d "${chemin}" && ${absolute} ]]; then echo "Le chemin est absolu."; elif [[ -d "${chemin}" && ! ${absolute} ]]; then echo "Le chemin est relatif."; else echo "${chemin} n'est pas un chemin valable !"; fi
Explications : je dois tester si un paramètre passé en argument à un script bash est un chemin :
1) existant, ce serait pas mal...
2) et s'il existe, je dois tester s'il est absolu ou relatif.
En gros, je bûche sur mon test if ; je n'arrive pas à tester à la fois si $chemin est un dossier, et tester un boolean. Je m'y prends sans doute mal dans ce deuxième cas.
Merci ! ;)
A voir également:
- Shell boolean
- Classic shell - Télécharger - Personnalisation
- Secure shell - Télécharger - Divers Web & Internet
- Shell startup windows 10 - Guide
- Shell infrastructure host c'est quoi - Guide
- Shell do while ✓ - Forum Shell
3 réponses
Ne me demandez pas pourquoi mais à force d'essais, j'ai trouvé ceci qui a l'air de fonctionner :
Apparemment les 1 et 0 ça marche pas, il faut écrire "true" et "false" en toutes lettres. Chose que je trouve un peu absurde, mais bon, c'est comme ça. Je pense que c'est dû au fait que true et false sont des commandes.
Ah, et puis au passage, pour éviter de faire tourner le 'case' sur un chemin qui n'existe pas, j'ai ficelé ça comme ça ;
Bonne soirée ! :)
#!/bin/bash chemin="Desktop" case "${chemin}" in /*) absolute=true ;; *) absolute=false ;; esac if ${absolute} && [ -d "${chemin}" ]; then echo "Le chemin est absolu."; elif ! ${absolute} && [ -d "${chemin}" ]; then echo "Le chemin est relatif."; else echo "${chemin} n'est pas un chemin valable !"; fi
Apparemment les 1 et 0 ça marche pas, il faut écrire "true" et "false" en toutes lettres. Chose que je trouve un peu absurde, mais bon, c'est comme ça. Je pense que c'est dû au fait que true et false sont des commandes.
Ah, et puis au passage, pour éviter de faire tourner le 'case' sur un chemin qui n'existe pas, j'ai ficelé ça comme ça ;
#!/bin/bash chemin="Desktop" if [ -d "${chemin}" ]; then case "${chemin}" in /*) absolute=true ;; *) absolute=false ;; esac if ${absolute}; then echo "Le chemin ${chemin} est absolu." elif ! ${absolute}; then echo "Le chemin ${chemin} est relatif." fi else echo "No such directory : ${chemin}." exit 0 fi
Bonne soirée ! :)
hello
dans ce test
dans ce test
if [[ -d "${chemin}" && ${absolute} ]];$absolute est traité comme une chaine de caractère et pas comme 1 ou zéro numérique, donc si la chaine n'est pas vide le test sera vrai
$ chemin=~/Desktop; absolute=1
$ [[ -d "${chemin}" && ${absolute} ]] && echo vrai
vrai
$ chemin=~/Desktop; absolute=0
$ [[ -d "${chemin}" && ${absolute} ]] && echo vrai
vrai
$ chemin=~/Desktop; absolute=""
$ [[ -d "${chemin}" && ${absolute} ]] && echo vrai
$