Linux下Bash中的case和C/C++中的switch类似,但是Bash中的case更强大和复杂。
- 强大主要体现在:Bash中case中的关键字可以是字符串类型,而每一项中可以包含正则表达式。
- 复杂主要体现在:Bash中case的每一个项后有三个选择:break(常规的break)、unconditional follow up(无条件继续)和conditional follow up(有条件继续)。
这篇文章的重点是上面的第2点。
注意
: case的无条件继续和有条件继续是bash 4.1.x及之后的版本中才有的特性。
执行如下命令可以查看你当前bash的版本
echo $BASH_VERSION
- 常规的break是在每一项后面加;;
- 无条件继续是在每一项后面加;&
- 有条件继续实在每一项后面加;;&
示例代码
#!/bin/bash
echo "Test No.1 ..."
case "1" in
1)
echo '1'
;;&
2)
echo '2'
;;
3)
echo '3'
;;
?)
echo '?'
;;
*)
echo '*'
;;
esac
echo "Test No.2 ..."
case "1" in
1)
echo '1'
;;
2)
echo '2'
;;&
3)
echo '3'
;;
?)
echo '?'
;;
*)
echo '*'
;;
esac
echo "Test No.3 ..."
case "1" in
1)
echo '1'
;&
2)
echo '2'
;;
3)
echo '3'
;;
?)
echo '?'
;;
*)
echo '*'
;;
esac
echo "Test No.4 ..."
case "1" in
1)
echo '1'
;;
2)
echo '2'
;&
3)
echo '3'
;;
?)
echo '?'
;;
*)
echo '*'
;;
esac
执行结果
Test No.1 ...
1
?
Test No.2 ...
1
Test No.3 ...
1
2
Test No.4 ...
1