web-dev-qa-db-fra.com

Comment fonctionne imbriqué if / then / else if dans bash?

Comment fonctionne la syntaxe en bash? Ceci est mon pseudocode pour les instructions de style C sinon. Par exemple:

If (condition)
    then
    echo "do this stuff"

elseif (condition)
    echo "do this stuff"

elseif (condition)
    echo "do this stuff"

    if(condition)
        then
        echo "this is nested inside"
    else
        echo "this is nested inside"

else
    echo "not nested"
19
Andrew Tsay

Je suppose que votre question porte sur l'ambiguïté pendante contenue dans de nombreuses grammaires; en bash il n'y a rien de tel. Chaque if doit être délimité par un compagnon fi marquant la fin du bloc if.

Compte tenu de ce fait (en plus d'autres erreurs syntaxiques), vous remarquerez que votre exemple n'est pas un script bash valide. En essayant de corriger certaines des erreurs, vous pourriez obtenir quelque chose comme ça

if condition
    then
    echo "do this stuff"

Elif condition
    then
    echo "do this stuff"

Elif condition
    then
    echo "do this stuff"
    if condition
        then
        echo "this is nested inside"
    # this else _without_ any ambiguity binds to the if directly above as there was
    # no fi colosing the inner block
    else
        echo "this is nested inside"

    #   else
    #       echo "not nested"
    #  as given in your example is syntactically not correct !
    #  We have to close the  last if block first as there's only one else allowed in any block.
   fi
# now we can add your else ..
else
   echo "not nested"
# ... which should be followed by another fi
fi
40
mikyra