是否可以在 Bash 脚本的 switch case 中组合两个条件?
Is it possible to combine two conditions in switch case for Bash script?
假设我想读取两个输入 x 和 y。根据它们的值,我想在 Bash 脚本中执行 switch case。
假设输入的 4 种组合是
x=0
、y=0
、
x=0
、y=1
、
x=1
、y=0
、
x=1
, y=1
.
但我不知道如何使用脚本来完成。我试过代码但出现语法错误。是否可以在 Bash 脚本的 switch case 中组合两个条件?
echo "enter x"
read x
echo "enter y"
read y
case "$x" "$y" in
"zero" "zero") echo "condtion 1"
;;
"zero" "one") echo "conditon 2"
;;
"one" "zero" ) echo "condition 3"
;;
"one" "one") echo "condition 4"
;;
esac
您可以使用分隔符:
echo "enter x"
read x
echo "enter y"
read y
SEP=":::"
case "${x}${SEP}${y}" in
"zero${SEP}zero") echo "condtion 1"
;;
"zero${SEP}one") echo "conditon 2"
;;
"one${SEP}zero" ) echo "condition 3"
;;
"one${SEP}one") echo "condition 4"
;;
esac
你可以把$x$y
看成一个二进制数。
#! /bin/bash
read -p 'enter x: ' x
read -p 'enter y: ' y
case $((2#$x$y)) in
0) echo 'condition 1';;
1) echo 'condition 2';;
2) echo 'condition 3';;
3) echo 'condition 4';;
esac
这最多适用于 64 个不同的状态:
$ echo $((64#11))
65
案例是关于模式匹配的,看看这个:
$ case "a" in
> b) echo fail;;
> a) echo ok ;;
> esac
ok
$ case "b" in
> b) echo fail;;
> a) echo ok ;;
> esac
fail
所以你只需要将一个模式传递给案例。在你的情况下可能是这样的:
read -p "enter x(0|1): " x
read -p "enter y(0|1): " y
case "$x$y" in
00) echo "condition 1";;
01) echo "condition 2";;
10) echo "condition 3";;
11) echo "condition 4";;
esac
并且需要一个分隔符以提高可读性(主要是)。
case "$x|$y" in
0|0) echo "condition 1";;
0|1) echo "condition 2";;
1|0) echo "condition 3";;
1|1) echo "condition 4";;
esac
假设我想读取两个输入 x 和 y。根据它们的值,我想在 Bash 脚本中执行 switch case。
假设输入的 4 种组合是
x=0
、y=0
、x=0
、y=1
、x=1
、y=0
、x=1
,y=1
.
但我不知道如何使用脚本来完成。我试过代码但出现语法错误。是否可以在 Bash 脚本的 switch case 中组合两个条件?
echo "enter x"
read x
echo "enter y"
read y
case "$x" "$y" in
"zero" "zero") echo "condtion 1"
;;
"zero" "one") echo "conditon 2"
;;
"one" "zero" ) echo "condition 3"
;;
"one" "one") echo "condition 4"
;;
esac
您可以使用分隔符:
echo "enter x"
read x
echo "enter y"
read y
SEP=":::"
case "${x}${SEP}${y}" in
"zero${SEP}zero") echo "condtion 1"
;;
"zero${SEP}one") echo "conditon 2"
;;
"one${SEP}zero" ) echo "condition 3"
;;
"one${SEP}one") echo "condition 4"
;;
esac
你可以把$x$y
看成一个二进制数。
#! /bin/bash
read -p 'enter x: ' x
read -p 'enter y: ' y
case $((2#$x$y)) in
0) echo 'condition 1';;
1) echo 'condition 2';;
2) echo 'condition 3';;
3) echo 'condition 4';;
esac
这最多适用于 64 个不同的状态:
$ echo $((64#11))
65
案例是关于模式匹配的,看看这个:
$ case "a" in
> b) echo fail;;
> a) echo ok ;;
> esac
ok
$ case "b" in
> b) echo fail;;
> a) echo ok ;;
> esac
fail
所以你只需要将一个模式传递给案例。在你的情况下可能是这样的:
read -p "enter x(0|1): " x
read -p "enter y(0|1): " y
case "$x$y" in
00) echo "condition 1";;
01) echo "condition 2";;
10) echo "condition 3";;
11) echo "condition 4";;
esac
并且需要一个分隔符以提高可读性(主要是)。
case "$x|$y" in
0|0) echo "condition 1";;
0|1) echo "condition 2";;
1|0) echo "condition 3";;
1|1) echo "condition 4";;
esac