您可以使用多个if … elif语句执行多路分支。 但是,这并不总是最好的解决方案,尤其是当所有分支都取决于单个变量的值时。
Shell支持case … esac语句,该语句恰好可以处理这种情况,并且比重复执行if … elif语句更有效。
语法:
case 值 in 模式1) Statement(s) to be executed if pattern1 matches ;; 模式2) Statement(s) to be executed if pattern2 matches ;; 模式3) Statement(s) to be executed if pattern3 matches ;; *) Default condition to be executed ;; esac
实例
该实例将字符串字与每个模式进行比较,直到找到匹配项。 执行匹配模式之后的语句。 如果未找到匹配项,则case语句将不执行任何操作而退出。
模式数量没有最高值,但最小数量为1。
当语句部分执行时,命令;; 指示程序流应跳到整个case语句的末尾。 这类似于C编程语言中的中断。
#!/bin/sh FRUIT="kiwi" case "$FRUIT" in "apple") echo "Apple pie is quite tasty." ;; "banana") echo "I like banana nut bread." ;; "kiwi") echo "New Zealand is famous for kiwi." ;; esac
执行结果:
New Zealand is famous for kiwi.