Je suis nouveau sur bash et je suis coincé pour essayer d’annuler la commande suivante:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
Ceci si la condition redevient vraie si je suis connecté à Internet. Je veux que ça se passe dans l'autre sens, mais mettre !
ne semble pas fonctionner n'importe où.
Tu peux choisir:
if [[ $? -ne 0 ]]; then # -ne: not equal
if ! [[ $? -eq 0 ]]; then # -eq: equal
if [[ ! $? -eq 0 ]]; then
!
inverse le retour de l'expression suivante, respectivement.
Mieux
if ! wget -q --spider --tries=10 --timeout=20 google.com
then
echo 'Sorry you are Offline'
exit 1
fi
Si vous vous sentez paresseux, voici une méthode succincte de gestion des conditions utilisant ||
(ou) et &&
(et) après l'opération:
wget -q --tries=10 --timeout=20 --spider http://google.com || \
{ echo "Sorry you are Offline" && exit 1; }
Puisque vous comparez des nombres, vous pouvez utiliser un expression arithmétique , ce qui simplifie le traitement des paramètres et la comparaison:
wget -q --tries=10 --timeout=20 --spider http://google.com
if (( $? != 0 )); then
echo "Sorry you are Offline"
exit 1
fi
Remarquez qu'au lieu de -ne
, vous pouvez simplement utiliser !=
. Dans un contexte arithmétique, nous n’avons même pas besoin de préfixer $
aux paramètres, c.-à-d.,
var_a=1
var_b=2
(( var_a < var_b )) && echo "a is smaller"
fonctionne parfaitement bien. Cela ne s'applique toutefois pas au paramètre spécial $?
.
De plus, étant donné que (( ... ))
évalue les valeurs non nulles comme vraies, c’est-à-dire qu’il a un état de retour égal à 0 pour les valeurs non nulles et un état de retour égal à 1, sinon, nous pourrions raccourcir à
if (( $? )); then
mais cela pourrait semer la confusion chez plus de personnes que ne le valent les touches enregistrées.
La construction (( ... ))
est disponible dans Bash, mais n'est pas requise par spécification POSIX Shell (mentionnée cependant comme une extension possible).
Ceci dit, il vaut mieux éviter $?
à mon avis, comme dans réponse de Cole et réponse de Steven .
Vous pouvez utiliser une comparaison inégale -ne
au lieu de -eq
:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
echo "Sorry you are Offline"
exit 1
fi