6.14. Wielokrotne rozgałęzianie kodu

Problem

Skrypt musi wykonać wiele operacji porównania wartości, co wymaga użycia wielu podobnych konstrukcji if-then-else. Czy nie ma łatwiejszego sposobu na rozwiązanie tego problemu?

Rozwiązanie

Wielokrotne rozgałęzianie kodu doskonale opisuje instrukcja case:

case $FN in
    *.gif) gif2png $FN
        ;;
    *.png) pngOK $FN
        ;;
    *.jpg) jpg2gif $FN
        ;;
    *.tif | *.TIFF) tif2jpg $FN
        ;;
    *) print "Format pliku %s nie jest obsługiwany" $FN
        ;;
esac

Odpowiadająca powyższemu skryptowi konstrukcja if-then-else miałaby postać:

if [[ $FN == *.gif ]] then gif2png $FN elif [[ $FN == *.png ]] then pngOK $FN elif [[ $FN == *.jpg ]] then jpg2gif $FN elif [[ $FN == *.tif || $FN == *.TIFF ]] then tif2jpg $FN else printf "Format pliku %s nie jest obsługiwany" ...

Get Bash. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.