Reputation: 43518
how to make switch execute 2 cases?
I tried with the following code, but it execute only the first case
#!/bin/sh
action="titi"
case "$action" in
toto|titi)
echo "1_$action"
;;
tata|titi)
echo "2_$action"
;;
esac
Upvotes: 4
Views: 3873
Reputation: 43518
based on @josay comment, this is called "fall through" and could be done with bash script by using ;;&
instead of ;;
in the first case. But the "fall through" works only if the bash version is 4.0 or later
Following, Source code updated with the "fall through"
#!/bin/sh
action="$1"
case "$action" in
toto|titi)
echo "1_$action"
;;&
tata|titi)
echo "2_$action"
;;
esac
Upvotes: 1
Reputation: 77085
The case
statement in bash executes the commands in the COMMAND-LIST
for the first match only.
However, In bash version 4
or later introduced the ;&
terminator. The ;;&
operator is like ;;
, except the case statement doesn't terminate after executing the associated list - Bash just continues testing the next pattern as though the previous pattern didn't match. Using these terminators, a case statement can be configured to test against all patterns, or to share code between blocks, for example.
Reference: Excerpt taken from http://wiki.bash-hackers.org/syntax/ccmd/case
So if you have bash v 4 or later
this would give your desired result:
#!/bin/sh
action="titi"
case "$action" in
toto|titi)
echo "1_$action"
;;&
tata|titi)
echo "2_$action"
;;
esac
Upvotes: 12
Reputation: 2347
Maybe consider titi
a default value to execute if no pattern is matched
#!/bin/sh
action="titi"
case "$action" in
toto)
echo "1_$action"
;;
tata)
echo "2_$action"
;;
*)
echo "1_$action"
echo "2_$action"
esac
Upvotes: 1
Reputation: 1867
Use if
twice and it matches twice.
if [ "$action" = 'toto' -o "$action" = 'titi' ]; then
echo "1_$action"
fi
if [ "$action" = 'tata' -o "$action" = 'titi' ]; then
echo "2_$action"
fi
If you need to use case
, how about using function
function f1
{
echo "1_$action"
}
function f2
{
echo "2_$action"
}
case "$action" in
titi)
f1
f2
;;
toto)
f1
;;
tata)
f2
;;
esac
Upvotes: 0