Le Shell est un langage symbolique. Toutes tes expressions sont d'abord développées avant d'être évaluées. C'est classique. En l'occurence, à la ligne :
Si `echo $CONTENT | grep "Can't connect to"` ne renvoie rien, tu te retrouves avec l'expression [ = "" ] dans laquelle il te manque un argument à gauche. Même chose pour
if [ $CONTENT = "" ]; then
mais dans l'autre sens : $CONTENT est développée en plusieurs mots là où la comparaison en attend exactement un de chaque côté. Dans certains cas, les guillemets eux-mêmes sont prédéveloppés, ce qui transforme les chaînes vides en néant. Pour pallier cela, on rajoutait un caractère identique de chaque côté.
Dans tous les cas, les chaînes vides en Shell, c'est pas glop. Tu as l'option « -z » dans les tests pour savoir si la longueur d'une chaîne est nulle, mais surtout grep te renvoie un code d'erreur quand il n'a pas trouvé le motif que tu cherches. Donc soit tu renvoies ce qu'il sort vers /dev/null, soit tu utilises directement l'option -q, pour le faire taire, et tu exploites directement ce qu'il te dit avec des pseudos ET ou OU.
# Développement avant évaluation
Posté par Obsidian . En réponse au message [bash] bug dans mon script. Évalué à 5.
if [ $RETURNVAL -eq 0 ] && [ `echo $CONTENT | grep "Can't connect to"` = "" ] && [ $CONTENT != "" ] ; thenSi `echo $CONTENT | grep "Can't connect to"` ne renvoie rien, tu te retrouves avec l'expression [ = "" ] dans laquelle il te manque un argument à gauche. Même chose pour
if [ $CONTENT = "" ]; thenmais dans l'autre sens : $CONTENT est développée en plusieurs mots là où la comparaison en attend exactement un de chaque côté. Dans certains cas, les guillemets eux-mêmes sont prédéveloppés, ce qui transforme les chaînes vides en néant. Pour pallier cela, on rajoutait un caractère identique de chaque côté.
Dans tous les cas, les chaînes vides en Shell, c'est pas glop. Tu as l'option « -z » dans les tests pour savoir si la longueur d'une chaîne est nulle, mais surtout grep te renvoie un code d'erreur quand il n'a pas trouvé le motif que tu cherches. Donc soit tu renvoies ce qu'il sort vers /dev/null, soit tu utilises directement l'option -q, pour le faire taire, et tu exploites directement ce qu'il te dit avec des pseudos ET ou OU.
echo "Foobar" | grep Foobar > /dev/null && echo "Trouvé"Ça t'évite d'avoir à lancer un sous-Shell.