La comparaison des variables dans les scripts shell
J'ai un projet qui implique des scripts shell et en comparant les valeurs des variables à l'intérieur d'eux. J'ai regardé ici et d'ailleurs sur la comparaison des variables et j'ai essayé tous les différents exemples donnés, mais je suis en cours d'exécution dans quelque chose qui n'est pas comme annoncé. OS est Solaris10
J'ai créé le script suivant comme une expérience d'apprentissage-
#!/bin/ksh
stest()
{
if $X = $Y
then echo they're the same
else echo they're notthe same
fi
}
X=a
Y=a
stest
echo completed
Je reçois une certaine variation de la suite-
l'utilisation de shell sh ou ksh-
#./test.sh
./test.sh[2]: a: not found
completed
à l'aide du shell bash-
#./test.sh
./test.sh: line 5: a: command not found
completed
J'ai essayé en joignant le if $X = $Y
ligne entre parenthèses et entre crochets doubles et je serai de retour
[a: not found
ou
[[a: not found
Si je change les variables X et Y pour le chiffre "1", j'obtiens la même chose-
./test.sh[2]: 1: not found
J'ai essayé d'enfermer les choses dans des apostrophes, guillemets doubles & arrière des citations.
Toute aide est appréciée.
- Pour les chaînes essayez
if [ $X == $Y ]
tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html - Qui fonctionne 🙂 merci !
Vous devez vous connecter pour publier un commentaire.
Après
if
, vous avez besoin d'une commande du shell, comme n'importe où ailleurs.$X = $Y
est interprétée comme une commande shell, sens$X
est interprété comme un nom de commande (à condition que la valeur de la variable est un seul mot).Vous pouvez utiliser le
[
de commande (également disponible entest
) ou le[[ … ]]
une syntaxe spéciale pour comparer deux variables. Notez que vous avez besoin d'espaces à l'intérieur des supports: les supports est un jeton dans la syntaxe shell.ou
[ … ]
fonctionne dans n'importe quel environnement,[[ … ]]
seulement en ksh, bash et zsh.Noter que vous avez besoin de guillemets autour de l'variables1. Si vous laisser tomber les guillemets, alors la variable est divisée en plusieurs mots et chaque mot est interprété comme un modèle générique. Cela ne se produit pas à l'intérieur de
[[ … ]]
, mais le côté droit de=
est interprété comme un caractère générique modèle là aussi. Toujours mettre des guillemets autour de la variable de substitution (sauf si vous voulez que la valeur de la variable pour être utilisé comme une liste de nom de fichier correspondant modèles, plutôt que comme une chaîne de caractères).1 Sauf sur
$X
la[[ … ]]
de syntaxe.Ce KornShell (ksh) script devrait fonctionner:
soExample.ksh
De sortie :
ksh version:
$X
contient des espaces, vous commencerez à voir des messages d'erreur ou, pire encore, la saisie de l'utilisateur en cours d'exécution du code.