Portál AbcLinuxu, 12. května 2025 06:02
case $VAR in 01) source /menu/aaa;; 02) source /menu/bbb;; 03) source /menu/ccc;; /* tady bych potřeboval vložit chybějící položky které vyplivne kód ale nevím jak je sem vložit */ 06) source /menu/eee;; 07) source /menu/fff;; esacneporadí někdo? Díky
Řešení dotazu:
#!/bin/bash ONE=3; VAR=03; case $VAR in 01) echo "a";; 02) echo "b";; 0$ONE) echo "c";; 04) echo "d";; esac
case $VAR in 01) source /menu/aaa;; 02) source /menu/bbb;; 03) source /menu/ccc;; /* tady nebudes nic vkladat, zachyti to wildcarda na konci */ 06) source /menu/eee;; 07) source /menu/fff;; *) source /menu/xxx $VAR ;; esacSkript xxx dostane VAR jako argument a muze se podle toho rozhodnout. Nebo muzes udelat vic takovych skriptu:
case $VAR in 01) source /menu/aaa;; 02) source /menu/bbb;; 03) source /menu/ccc;; /* tady nebudes nic vkladat, zachyti to wildcarda na konci */ 06) source /menu/eee;; 07) source /menu/fff;; *) test -f /menu/xxx-${VAR} && source /menu/xxx-${VAR} ;; esacPokud bude VAR="05" a bude existovat /menu/xxx-05 , vykona se. Case patterny v bashi muzou obsahovat obvykle expanze a substituce, takze se s tim da blbnout podstatne vic nez co umi switch statement ve vetsine jinych jazyku, ale to uz musis r.t.f.m.
shopt -e extglob
, tak ma v case
aj regularne vyrazy. Vdaka !() dokonca mozno aj viac, ale to uz nech posudi nejaky lingvista.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.