Note de départ : la réponse a été élaborée à partir des commentaires sur la question, en particulier en réponse au dernier commentaire.
Tout d'abord, qu'est-ce que [[
? Il s'agit d'un mot-clé du shell.
samveen@maverick:~$ type [[
[[ is a shell keyword
Cela signifie que [[
est un mot-clé interne à bash, pas une commande, et ne fonctionnera donc pas avec d'autres shells. Ainsi, votre sortie d'erreur
scripts/ssidchecker.sh: 22: [[: not found
signifie que l'interpréteur de commandes que vous utilisez est probablement
- Pas de bash
- Une version de bash antérieure à la version 2.02 (
[[
introduite dans Bash-2.02)
Etant donné que la version 2.02 est vraiment très ancienne (avant l'an 2000), tout ceci indique simplement que le shell que vous utilisez pour exécuter le script n'est probablement pas /bin/bash
au lieu d'être probablement /bin/sh
qui est le chemin le plus couramment utilisé pour les scripts de l'interpréteur de commandes Bourne. shebang
(le #!
).
Veuillez le remplacer par /bin/bash
ou exécuter explicitement bash scripts/ssidchecker.sh
et vous êtes prêt à partir.
Quant à la raison pour laquelle la else
a toujours été exécutée, la section [[
n'est pas trouvée est la même chose qu'un échec (valeur de retour non-nulle), du point de vue de if
. Ainsi, le else
est exécutée.
samveen@maverick:~$ /bin/whosyourdaddy
-bash: /bin/whosyourdaddy: No such file or directory
samveen@maverick:~$ echo $?
127
En ce qui concerne la portabilité, le wiki des hackers de bash indique également ce qui suit à propos de l'option [[
mot-clé :
Parmi les principaux "langages POSIX-shell superset" (à défaut d'un langage de type meilleur terme) qui ont [[
La commande composée de l'expression de test est la suivante l'une des fonctionnalités non-POSIX les plus portables. A l'opérateur La quasi-totalité des caractéristiques principales sont les mêmes entre Ksh88, Ksh93, mksh, Zsh et Bash. Ksh93 ajoute également un grand nombre de fonctionnalités uniques de uniques non supportées par les autres interpréteurs de commandes, notamment le support de plusieurs dialectes de regex différents, qui sont invoqués en utilisant une syntaxe différente de celle de Bash. une syntaxe différente de celle de Bash =~
mais =~
est toujours soutenu et prend par défaut la valeur ERE.
Ainsi, votre script échouera probablement sur la page =~
même si la coquille supporte [[
au cas où la coquille ne serait pas bash
mais soutient [[
.