2013-07-17 2 views
2

как сделать переключатель выполнить 2 случая?как сделать переключатель выполнить 2 случая

Я попытался с помощью следующего кода, но выполнить только первый случай

#!/bin/sh 
action="titi" 

case "$action" in 
    toto|titi) 
    echo "1_$action" 
    ;; 
    tata|titi) 
    echo "2_$action" 
    ;; 
esac 
+2

То, что вы хотите, называется «провалиться». Пожалуйста, взгляните на: http://stackoverflow.com/questions/12010686/case-statement-fallthrough – Josay

+0

Каков ожидаемый результат и что вы получили? Ожидаете ли вы '1_titi' и' 2_titi' вместе? – VoidPointer

+0

@VoidPointer exactelly Я ожидал 1_titi и 2_titi вместе – MOHAMED

ответ

7

case оператор в Баш выполняет команды в COMMAND-LIST для только первый матч.

Однако в bash version 4 или более поздней версии был введен терминатор ;&. Оператор ;;& похож на ;;, за исключением того, что оператор case не заканчивается после выполнения связанного списка. Bash просто продолжает тестирование следующего шаблона, как если бы предыдущий шаблон не соответствовал. Используя эти терминаторы, оператор case может быть настроен для проверки всех шаблонов или совместного использования кода между блоками.

Ссылка: Выдержки взяты из http://wiki.bash-hackers.org/syntax/ccmd/case

Так что, если у вас есть bash v 4 or later это даст желаемый результат:

#!/bin/sh 
action="titi" 

case "$action" in 
    toto|titi) 
    echo "1_$action" 
    ;;& 
    tata|titi) 
    echo "2_$action" 
    ;; 
esac 
0

Используйте if дважды, и он соответствует дважды.

if [ "$action" = 'toto' -o "$action" = 'titi' ]; then 
    echo "1_$action" 
fi 
if [ "$action" = 'tata' -o "$action" = 'titi' ]; then 
    echo "2_$action" 
fi 

Если вам нужно использовать case, как об использовании function

function f1 
{ 
    echo "1_$action" 
} 

function f2 
{ 
    echo "2_$action" 
} 

case "$action" in 
    titi) 
    f1 
    f2 
    ;; 
    toto) 
    f1 
    ;; 
    tata) 
    f2 
    ;; 
esac 
+0

Я хочу использовать оператор switch, а не если – MOHAMED

+0

MOHAMED, я отредактировал, чтобы добавить еще один код для использования 'switch'. – kamae

0

Может рассмотреть titi значение по умолчанию для выполнения, если никакой образец не соответствует

#!/bin/sh 
action="titi" 

case "$action" in 
    toto) 
    echo "1_$action" 
    ;; 
    tata) 
    echo "2_$action" 
    ;; 
    *) 
    echo "1_$action" 
    echo "2_$action" 
esac 
1

на основе @josay комментарий, это называется «провалиться» и может быть выполнено с помощью скрипта bash с помощью ;;& вместо ;; в первом случае. Но «проваливаются» работает только если версия Баш 4.0 или более поздняя версия

После, Исходный код обновляется с «проваливаются»

#!/bin/sh 
action="$1" 

case "$action" in 
    toto|titi) 
    echo "1_$action" 
    ;;& 
    tata|titi) 
    echo "2_$action" 
    ;; 
esac 
Смежные вопросы