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)都标上。