Portál AbcLinuxu, 12. května 2025 13:39

Dotaz: BASH - podminka ano/ne

15.9.2008 20:59 Micah
BASH - podminka ano/ne
Přečteno: 364×
Odpovědět | Admin
Dobry den,

zajimalo by me, jestli jde v bashi nejak jednoduse (bez pouziti if) udelat podminka, ktera v pripade uspechu predesle akce vypise treba OK a v pripade neuspechu failed. Toto znam:
akce && echo "OK"
akce || echo "failed"
ale potreboval bych tyto dve veci skloubit do jedne pokud chapete. Proste abych nemusel psat podminku stylu
if (predchozi akce se povedla)
    echo "OK"
else
    echo "failed"
Dekuji
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.9.2008 21:20 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: BASH - podminka ano/ne
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kdysi jsem zkousel neco jako
podminka && akce_ANO || akce_NE
a mam pocit, ze to fungovalo. Mozna ty dve akce a/nebo ty && a || byly prehozene, to uz ted nevim.

Dejv
Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
15.9.2008 22:52 Micah
Rozbalit Rozbalit vše Re: BASH - podminka ano/ne
Muze to prosim nekdo overit? Zrovna nejsem u Unixu. Dekuji.
15.9.2008 23:20 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: BASH - podminka ano/ne
> true && echo 1 || echo 2
> 1

> false && echo 1 || echo 2
> 2
15.9.2008 23:57 Micah
Rozbalit Rozbalit vše Re: BASH - podminka ano/ne
Dekuji, presne to jsem potreboval vedet. Celkem me ale prekvapuje ze to funguje. Kdyz si vezmu tento radek:
true && echo 1 || echo 2
Tak nemelo by se logicky "2" vypsat pouze pokud prikaz "echo 1" (tedy operace zapsani textu na stdout) selze? Jsem rad ze to funguje jak to funguje, jen mi to trochu odporuje definici operatoru && a ||.
16.9.2008 00:11 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: BASH - podminka ano/ne
Nebude ten trik ve zkracenem vyhnodnocovani?

false && echo 1 bude vzdy false, takze bash nevyhodnoti druhou pulku - je to zbytecne, vyraz bude false nezavisle na hodnote druhe pulky vyrazu (tj. ono echo 1)

pak zbyde vlastne

false || echo 2 - jelikoz prvni je false, je nutno vyhnodnotit druhou pulku a vypise to tu 2
Překladač ti nikdy neřekne: "budeme kamarádi"
16.9.2008 01:02 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: BASH - podminka ano/ne
Áno, presne takto to podľa manuálu funguje. :)

Z toho okrem iného vyplýva aj to, že
> true && false || echo 2
> 2
(takže si treba dať pozor na príkazy, ktoré sa v tej podmienke vykonávajú)
16.9.2008 00:14 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: BASH - podminka ano/ne
V prvnim pripade je to opacne - true && echo1 muze byt true nebo false, proto se musi vyhodnotit echo 1

vysledkem je opet true (pokud echo nahodou z jakehosi zahadneho duvodu neselze) a zbyde

true || echo 2

vysledkem toho je vzdy true, nezavisle na druhe pulce vyrazu a proto se echo 2 nevyhodnocuje
Překladač ti nikdy neřekne: "budeme kamarádi"
16.9.2008 07:45 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: BASH - podminka ano/ne
Odpovědět | | Sbalit | Link | Blokovat | Admin
mozna ne uplne k tematu, ale pokud chcete jen udelat sled prikazu a netrapit se s explicitnim testovanim na OK/failed u kazdeho z nich, tak lze pouzit trap ERR - viz man
In Ada the typical infinite loop would normally be terminated by detonation.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.