Domovská » jak » Průvodce pro začátečníky k Shell skriptování 4 podmínek a If-Then prohlášení

    Průvodce pro začátečníky k Shell skriptování 4 podmínek a If-Then prohlášení

    Pokryli jsme dostatek základů našeho průvodce skriptování shellů, které byste měli cítit pohodlně experimentovat. V tomto týdenním splátce se budeme zabývat některými zábavnějšími záležitostmi, jako jsou podmínky a "if-then" prohlášení.

    Jaké jsou podmínky?

    V běžném jazyce říkáme, že podmínky jsou požadavky, které musí být splněny, aby se něco stalo. Aby mohl být notebook připojen k internetu, je třeba splnit několik podmínek, jako je mít ISP, modem a / nebo směrovač je zapnutý, můj notebook je zapnutý atd. Je to docela jednoduché, a pokud někdo těchto požadavků nejsou splněny, výsledek - můj laptop připojený k internetu - se nestane.

    Podmínky v oblasti výpočetní práce jsou podobné. Můžeme otestovat, zda řetězec odpovídá jinému řetězci, zda neodpovídá jinému řetězci nebo zda vůbec neexistuje. Podobně můžeme vyzkoušet číselné argumenty, abychom zjistili, zda je jeden velký, menší než nebo rovný druhému. Chcete-li, aby se něco stalo po splnění podmínek testu, použijeme příkazy "if-then". Jejich formát je velmi jednoduchý.

    pokud STAV
    pak
    command1
    command2
    ...
    commandn
    fi

    Prohlášení

    Pojďme spustit rychlý malý zkušební skript, ať ano?

    pokud test $ 1 -gt $ 2
    pak
    echo "$ 1 je větší než $ 2"
    fi

    Všimnete si, že pouze pokud je tato podmínka pravdivá, skript provede následující příkaz. V opačném případě ukončí příkaz "if". Pokud existují nějaké příkazy po příkazu "if", pak budou spuštěny jako normální. Na závěr výše uvedeného skriptu jsem přidal následující řádek, abych to ilustroval:

    echo "Toto je po příkazu if"

    Zde je několik dalších číselných operátorů, které můžete vyzkoušet:

    • -eq: rovná se
    • -ne: nerovná
    • -lt: méně než
    • -le: méně než nebo rovnající se
    • -gt; větší než
    • -ge: větší nebo roven

    Testování řetězců

    Nyní, pokud upravíme první řádek našeho skriptu takto:

    pokud test $ 1 = $ 2

    pak bude podmínka testovat, pokud jsou dva stejné. Zde je tu chyba! Použití značky equals (=) porovnává dva řetězce, nikoli čísla. Pokud chcete porovnávat čísla, musíte použít operátor "-eq" podobně jako v případě, že jsme použili "-gt" výše.

    Nyní uděláme další změnu:

    pokud test $ 1! = $ 2

    Zahrnutí vykřičníku (!) Působí jako "ne" modifikátor. To znamená, že spustí následující příkaz pouze tehdy, když dva řetězce neodpovídají.

    Zde je seznam několika testů na bázi řetězců, které můžete použít:

    • řetězec: pomocí samotného argumentu testuje, zda není řetězec prázdný (null) nebo není definován nějakým způsobem
    • -n řetězec: testuje, zda není řetězec prázdný a je definován
    • -z řetězec: bude testovat, pokud je řetězec prázdný a je tímto způsobem definován

    Co jiného o tom?

    Přiznávám, že název oddílu byl určitě špatnou hrou. Dobře, víme, jak provést příkaz, pokud je test true, ale co když chceme provést jiný příkaz, pokud je nepravdivý? Můžeme je snadno spojit přidáním části do našich "if-then" prohlášení - "else"!

    pokud STAV
    pak
    command1
    command2
    ...
    commandn
    jiný
    command1
    command2
    ...
    commandn
    fi

    Sestavme jednoduchý skript.

    Je tam všechno se správným odsazením. Pokud se podíváte pozorněji, zjistíte, že namísto testovacího příkazu jsme použili hranaté závorky ([a]). Jsou funkčně ekvivalentní pro naše účely a máte mnohem větší pravděpodobnost, že z různých důvodů vidíte hranaté závorky, a proto je budeme používat od nynějška.

    Zde je výstup, který vypadá takto:

    Je to tak snadné!

    Co teď dělám?

    Nyní, když víte, jak používat příkazy if-then-else, můžete spustit skripty, které mohou provádět testy. Například můžete spustit skript, který vypočítá md5 hash souboru a pak jej porovnat s tím, který jste stáhli v souboru, abyste zjistili, zda se shodují.

    U některých bonusových bodů můžete vytvořit skript, který má smyčku "pro", ale použije testovací podmínky namísto čtení řádků ze seznamu ...


    Získáváme některé z zajímavějších částí Průvodce pro začátečníky Shell skriptování pro začátečníky. Pokud jste vynechali předchozí lekce, najdete zde rychlý seznam, který můžete zkontrolovat:

    1. Základy skriptování Shell
    2. Použití pro smyčky
    3. Další základní příkazy
    4. Jaké jsou rozdíly mezi shelly Linuxu?
    5. Jak používat základní regulární výrazy

    Pokud jste vytvořili nebo používali skripty používající testovací podmínky, příkazy if-then-else a smyčky "pro", dejte se s námi do poznámek!