Je suis nouveau dans bash et je suis bloqué en essayant 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
Cette condition si retourne true si je suis connecté à Internet. Je veux que ça se passe dans l'autre sens, mais mettre !
n'importe où ne semble pas fonctionner.
linux
bash
if-statement
negate
Sudh33ra
la source
la source
if ! [[ ...
fonctionneRéponses:
Tu peux choisir:
!
inverse respectivement le retour de l'expression suivante.la source
test
commande:if test $? -ne 0; then
if
attend une instruction qui vaut 0 ou 1, vous pouvez donc utiliser la commande elle-même et l'inverser:if ! wget ...; then ...; fi
Mieux
la source
!
commande et la commande suivante, sinon vous ferez une expansion de l'historique. unix.stackexchange.com/questions/3747/…Si vous vous sentez paresseux, voici une méthode laconique de gestion des conditions en utilisant
||
(ou) et&&
(et) après l'opération:la source
&&
commande après l'écho par un fichier;
. La raison en est que si la sortie est redirigée vers un fichier sur un disque plein, leecho
renverra un échec et leexit
ne se déclenchera jamais. Ce n'est probablement pas le comportement que vous souhaitez.set -e
et à défautecho
, vous quitterez le script de toute façonPuisque vous comparez des nombres, vous pouvez utiliser une expression arithmétique , qui permet une gestion plus simple des paramètres et des comparaisons:
Remarquez comment au lieu de
-ne
, vous pouvez simplement utiliser!=
. Dans un contexte arithmétique, nous n'avons même pas besoin de préfixer$
les paramètres, c'est-à-direfonctionne parfaitement bien. Cela ne s'applique cependant pas au
$?
paramètre spécial.De plus, puisque
(( ... ))
évalue les valeurs non nulles à vrai, c'est-à-dire a un état de retour de 0 pour les valeurs non nulles et un état de retour de 1 sinon, nous pourrions raccourcir àmais cela peut dérouter plus de personnes que ne valent les frappes enregistrées.
La
(( ... ))
construction est disponible dans Bash, mais n'est pas requise par la spécification du shell POSIX (mentionnée comme une extension possible, cependant).Tout cela étant dit, il est préférable d'éviter
$?
tout à fait à mon avis, comme dans la réponse de Cole et la réponse de Steven .la source
(( ... ))
? Référence des programmeurs POSIX - Commandes composées:)
Vous pouvez utiliser une comparaison inégale
-ne
au lieu de-eq
:la source