J'ai ce script shell qui ne fonctionne pas.
Contribution:
Server_Name=1
if [ $Server_Name=1 ]; then
echo Server Name is 1
else
echo Server Name is not 1
fi
Sortie:
Server Name is 1
Mais si je change de Server_Name=2
, le résultat est le suivant:
Server Name is 1
Quand je change Server_Name
en 2
, je veux qu'il dise: Server Name is 2
.
Je sais que c'est la partie if [ $Server_Name=1 ];
.
Comment je le répare?
Votre script indique que vous utilisez des comparaisons de chaînes.
Supposons que le nom du serveur pourrait être une chaîne au lieu d’un nombre uniquement.
Pour Comparaisons de chaînes :if [[ "$Server_Name" == 1 ]]; then
Notes:
L'espacement autour de = est un doit if [ $Server_Name=1 ]; then
est FAUX
[[...]] réduit les erreurs car aucun développement de chemin d'accès ou fractionnement de Word n'a lieu entre [[et]]
Préfère citer des chaînes qui sont des "mots"
Pour Comparaisons entières :if [[ "$Server_Name" -eq 1 ]]; then
Plus d'information:
Essaye ça:
if [ $Server_Name -eq 1 ];then
Essayer,
#!/bin/bash
Server_Name=50
if [ $Server_Name = 49 ]
then
echo "Server Name is 50"
else
echo "Server Name is below 50"
fi
sortie:
#./scriptname.sh
Server Name is below 50
[ $Server_Name=1 ]
ne fonctionne pas comme prévu car la syntaxe à l'intérieur des crochets simples n'est pas particulière à Bash. Comme d'habitude, la variable $Server_Name
est remplacée par 1, ainsi toute la commande test ([
) est un seul argument: la chaîne 1=1
. Puisque cette corde a une longueur non nulle, test renvoie true .
Pour les shells compatibles POSIX, vous pouvez utiliser les commandes test suivantes:
[ "$Server_Name" = 1 ]
vérifie si le $Server_Name
est égal à la chaîne 1
.
[ "$Server_Name" -eq 1 ]
checks est que le $Server_Name
est égal au nombre 1
, c’est-à-dire qu’il effectue une comparaison numérique au lieu d’une comparaison de chaînes.
La valeur de retour des deux commandes sera différente, par exemple si vous définissez Server_Name=01
. Le premier retournera faux, le second retournera vrai.
Notez que s'il est possible que la variable $Server_Name
soit indéfinie, elle doit être citée ou test afficher une erreur lors de l'appel.
Réponse simple. Votre code est correct - presque. la seule chose qui vous manque, ce sont des espaces ... (et peut-être un extra "=")
if [ $Server_Name=1 ]; then
ne calculera pas correctement.
if [ $Server_Name == 1 ]; then
est ce que vous cherchez.
Et maintenant la déclaration à propos de la chaîne par rapport aux nombres. Chaque fois que vous recherchez une comparaison comme is/is-not, alors == sera toujours correct.
Et je suppose que vous avez toujours un nom de serveur sous forme de chaîne, pas un nombre - pas vrai? ;-)
Bonne chance avec votre apprenti costaud robuste.
Ciao