web-dev-qa-db-fra.com

Quelle commande signifie "ne rien faire" dans une condition de Bash?

Parfois, lors de la création de conditions, j'ai besoin que le code ne fasse rien, par exemple ici, je veux que Bash ne fasse rien quand $a est supérieur à "10", affiche "1" si $a est inférieur à " 5 ", sinon, imprimez" 2 ":

if [ "$a" -ge 10 ]
then
Elif [ "$a" -le 5 ]
then
    echo "1"
else
    echo "2"
fi

Cela fait une erreur cependant. Existe-t-il une commande qui ne fera rien et qui ne ralentira pas mon script?

150
Village

La commande no-op dans Shell est : (deux points).

if [ "$a" -ge 10 ]
then
    :
Elif [ "$a" -le 5 ]
then
    echo "1"
else
    echo "2"
fi

De la manuel bash :

: (deux points)
Ne rien faire à part développer des arguments et effectuer des redirections. Le statut de retour est zéro.

290
Barmar

Vous pouvez probablement simplement utiliser la commande true:

if [ "$a" -ge 10 ]; then
    true
Elif [ "$a" -le 5 ]; then
    echo "1"
else
    echo "2"
fi

Une alternative, dans votre cas d’exemple (mais pas nécessairement partout), est de commander à nouveau votre if/else:

if [ "$a" -le 5 ]; then
    echo "1"
Elif [ "$a" -lt 10 ]; then
    echo "2"
fi
33
Flimzy

Bien que je ne réponde pas à la question initiale concernant la commande no-op, de nombreux (sinon la plupart des) problèmes quand on peut penser " dans cette branche, je ne dois rien faire " peuvent être contourné par une simple restructuration de la logique afin que cette branche ne se produise pas.

J'essaie de donner une règle générale en utilisant l'exemple des PO

ne rien faire quand $ a est supérieur à "10", écrire "1" si $ a est inférieur à "5", sinon, imprimer "2"

nous devons éviter une branche où $a obtient plus de 10, de sorte que $a < 10 en tant que condition générale puisse être appliqué à toutes les autres, condition suivante.

En termes généraux, lorsque vous dites ne faites rien lorsque X , reformulez-le ainsi évitez une branche où X . Habituellement, vous pouvez éviter cela en annulant simplement X et en l'appliquant à toutes les autres conditions.

Ainsi, l'exemple de PO avec la règle appliquée peut être restructuré comme suit:

if [ "$a" -lt 10 ] && [ "$a" -le 5 ]
then
    echo "1"
Elif [ "$a" -lt 10 ]
then
    echo "2"
fi

Juste une variante de ce qui précède, englobant tout dans la condition $a < 10:

if [ "$a" -lt 10 ]
then
    if [ "$a" -le 5 ]
    then
        echo "1"
    else
        echo "2"
    fi
fi

(Pour cet exemple spécifique @ restructuration de Flimzys est certainement meilleur, mais je voulais donner une règle générale à tous ceux qui cherchent à ne rien faire.)

9
Basti M