如果有很多层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 $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语句把用户输入的选项与已知的菜单项对比。
在下面的例子中,程序仅显示用户欲做何种选择的信息(当然,如果让程序再复杂一点,可以用其他的指令来取代这些信息),请看:
#!/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