💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## case语句 如果有很多层if else,最好使用case来代替。 case语句的功能是:把保留字case右边的值和闭括号“)”左边的值比较,其语法规则如下: ~~~ case VariableName in value1)       Instruction         ;; value2 )       Instruction       ;; esac ~~~ 从上面可以看出,case语句以保留字case开头,以esac结尾。它首先检查变量VariableName 的值,如果它与value1相等则执行第一组指令集,如果它与value2 相等则执行第二组指令集,以此类推。同时,在每组指令集的最后用两个分号(;;)。 在下面的例子中,将用case语句取代本章开头的if语句,请看: ~~~ case $region in 1) echo "Hello,Gob. " ;; 2) echo "Hello,Mary." ;; 3) echo "Hello,Joan." ;; 4) echo "Hello,Mike." ;; 5) echo "Hello,Tom." ;; esac ~~~ ## case语句中的默认情况 在case语句中,如果用户没有给程序提供所需要的匹配值,那么程序就找不到它所要匹配的对象。如果是由程序设计者本人提供程序所必需的匹配值,这种情况有时就不会发生。 我们完全可以用保留字符(*)来为此留一条后路,即提供一种默认情况,让程序在此情况下执行一些必要的操作。请看下面示例: ~~~ case $region in 1) echo "Hello,Gob. " ;; 2) echo "Hello,Mary." ;; 3) echo "Hello,Joan." ;; 4) echo "Hello,Mike." ;; 5) echo "Hello,Tom." ;; *) echo "Sorry,your region is not on my list." esac ~~~ ## case语句在用户界面中的应用 case语句最常和程序的用户界面一起使用。在一个程序显示菜单后,程序必须等待用户从键盘上输人一个字符。这通常由用户做出选择,输人选项,程序就用case语句把该选项与某些特定的值做比较。 假设读者想建立一个电子电话号码簿。为简单起见,在这里仅要求其具有两项功能:一是显示电话号码;二是可以添加电话号码。 首先,程序以菜单选项的形式将这两项功能显示在屏幕上。然后,由用户从键盘上输入相应的选项。 为实现这个目标,可以用case语句把用户输入的选项与已知的菜单项对比。 在下面的例子中,程序仅显示用户欲做何种选择的信息(当然,如果让程序再复杂一点,可以用其他的指令来取代这些信息),请看: ~~~ #!/bin/bash clear echo "" echo "The Telephone Book" echo "" echo "1.pisplay A Telephone Number" echo "2.Add A New Telephone Number" echo "" echo "Q Quit" echo "" echo "Enter your selection;” read selection case $selsction in "1") echo "You want to display a telephone number." ;; "2") echo "You want to add a new telephone number." ;; "q") exit 0 ;; "Q") exit 0 ;; *) echo "You made an invalid selection." esac ~~~ 为了避免用户退出程序时出现问题,最好像上面的例子那样,将字母的大、小写(如q和Q)都标上。