目录

Bash中case的用法


caseBash中很实用的命令。

基本结构

1
2
3
4
5
6
7
8
9
##!/bin/bash
read -p "你喜欢什么颜色:" color
case $color in
    red) echo -e "\e[1;31m你喜欢红色\e[0m";;
    green) echo -e "\e[1;32m你喜欢绿色\e[0m";;
    yellow) echo -e "\e[1;33m你喜欢黄色\e[0m";;
    blue) echo -e "\e[1;34m你喜欢蓝色\e[0m";;
    *) echo -e "\e[1;30m这是什么颜色?\e[0m";;
esac

这段代码,就是根据你的输入来显示不同颜色的文本,把变量color的值,依次和下面右括号里的值做比较,如果相同,就执行后面的语句。

/posts/104/img/2020-11-29%2022-00-48%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png

;;

注意每个条件末尾都是两个分号。这很好理解,因为每个条件满足的时候,需要执行的语句可能不止一句。而在bash中多个语句在一行是用一个分号间隔的。可以理解为C语言的switch中的break

;&

1
2
3
4
5
6
7
8
9
##!/bin/bash
read -p "你喜欢什么颜色:" color
case $color in
    red) echo -e "\e[1;31m你喜欢红色\e[0m";&
    green) echo -e "\e[1;32m你喜欢绿色\e[0m";&
    yellow) echo -e "\e[1;33m你喜欢黄色\e[0m";&
    blue) echo -e "\e[1;34m你喜欢蓝色\e[0m";;
    *) echo -e "\e[1;30m这是什么颜色?\e[0m";;
esac

/posts/104/img/2020-11-29%2022-16-04%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png

如果将;;替换成;&那么在执行完匹配的语句后,将接着执行,而不管下面的条件匹配不匹配,直到遇到;;为止。

;;&

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
##!/bin/bash
read -p "请输入一个区号:" num
case $num in
    *)echo -n "中国";;&
    03*)echo -n "河北省";;&
        ??10)echo "邯郸市";;
        ??11)echo "石家庄";;
        ??17)echo "沧州市";;
    07*)echo -n "江西省";;&
        ??91)echo "南昌市";;
        ??92)echo "九江市";;
        ??97)echo "赣州市";;
esac

/posts/104/img/2020-11-29%2022-23-55%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png

条件语句以;;&结束的时候,程序执行到这里不会停止,会继续测试下面条件,如果满足继续执行,直到遇到;;esac

右括号中的表达式

  • *是匹配0个或多个任何字符。
  • ?是匹配一个字符。
  • []表示一个范围。如[0-9][a-zA-Z]
  • |分隔的多个表达式。如yes|YES无论是输入yes还是YES都可以被匹配。