switch
)Blocks of cascading conditionals
switch
is a large block for simplifying cascades of
conditional statements.
switch [value] {
case | if { conditional } [then] { code-block }
case | if { conditional } [then] { code-block }
...
[ default { code-block } ]
} -> <stdout>
The first parameter should be either case or
if – the statements are subtly different and thus alter
the behavior of switch
.
then is optional (‘then’ is assumed even if not explicitly present).
Output an array of editors installed:
switch {
if { which vi } { out vi }
if { which vim } { out vim }
if { which nano } { out nano }
if { which emacs } { out emacs }
} -> format: json
A higher/lower game written using switch
:
function higherlower {
try {
rand int 100 -> set rand
while { $rand } {
read guess "Guess a number between 1 and 100: "
switch {
case: { = $guess < $rand } then {
out "Too low"
}
case: { = $guess > $rand } then {
out "Too high"
}
default: {
out "Correct"
let rand=0
}
}
}
}
}
String matching with switch
:
read name "What is your name? "
switch $name {
case "Tom" { out "I have a brother called Tom" }
case "Dick" { out "I have an uncle called Dick" }
case "Sally" { out "I have a sister called Sally" }
default { err "That is an odd name" }
}
If you supply a value with switch
…
switch value { ... }
…then all the conditionals are compared against that value. For example:
switch foo {
case bar {
# not executed because foo != bar
}
case foo {
# executed because foo != foo
}
}
You can use code blocks to return strings too
switch foo {
case {out bar} then {
# not executed because foo != bar
}
case {out foo} then {
# executed because foo != foo
}
}
This style of syntax could be argued as a prettier counterpart to if/else if. Only code blocks are support and each block is checked for its boolean state rather than string matching.
This is simply written as:
switch { ... }
case
,
if
and default
?A switch
command may contain multiple
case and if blocks. These statements
subtly alter the behavior of switch
. You can mix and match
if and case statements within the same
switch
block.
A case statement will only move on to the next
statement if the result of the case statement is
false. If a case statement is
true then switch
will exit with an exit
number of 0
.
switch {
case { false } then {
# ignored because case == false
}
case { true } then {
# executed because case == true
}
case { true } then {
# ignored because a previous case was true
}
}
An if statement will proceed to the next statement even if the result of the if statement is true.
switch {
if { false } then {
# ignored because if == false
}
if { true } then {
# executed because if == true
}
if { true } then {
# executed because if == true
}
}
default statements are only run if all case and if statements are false.
switch {
if { false } then {
# ignored because if == false
}
if { true } then {
# executed because if == true
}
if { true } then {
# executed because if == true
}
if { false } then {
# ignored because if == false
}
default {
# ignored because one or more previous if's were true
}
}
default was added in Murex version 3.1
catch has been deprecated in version 3.1 and replaced with default.
catch
): Handles the exception code raised by
try
or trypipe
set
):
Define a variable (typically local) and set it’s valuebreak
):
Terminate execution of a block within your processes scopefalse
):
Returns a false
valueif
):
Conditional statement to execute different blocks of code depending on
the result of the conditionand
): Returns true
or false
depending on whether multiple conditions are metor
): Returns true
or false
depending on whether one code-block out of multiple ones supplied is
successful or unsuccessful.while
):
Loop until condition false!
): Reads
the stdin and exit number from previous process and not’s it’s
conditiontrypipe
): Checks for non-zero exits of each function
in a pipelinetrue
): Returns
a true
valuetry
):
Handles non-zero exits inside a block of codelet
: Evaluate a
mathematical function and assign to variable (deprecated)This document was generated from builtins/core/structs/switch_doc.yaml.
This site's content is rebuilt automatically from murex's source code after each merge to the master
branch. Downloadable murex binaries are also built with the website.
Last built on Wed Jan 15 23:07:50 UTC 2025 against commit b4c4296b4c429617fd41527ea0efef33c52c15ef2b64972.
Current version is 6.4.2063 (develop) which has been verified against tests cases.