case是一种判断的性质,当变量数量确定,用case是一个很好的表现方式。case常见最多的就就是服务的启动脚本了,通过第一个参数来进行确定。
case $变量名称 in
  "参数内容")  \\ 例如   "y"|"Y")
     命令集合
     ;;
  "参数内容")
     命令集合
     ;;
  *)                \\代表其他
     命令集合
     ;;
esac
 
/path/to/script  patten1 patten2
                    $1     $2
$1 $2 代表脚本执行时后面输入的第一个参数
$# 代表参数的个数
$@  将参数输出
函数在shell脚本中的作用就是将操作重复的命令统一集合起来,便于管理、执行。
   function   fun_name() {
           命令集
   }
  
 例子:这个是在linux系统的服务脚本中截取的部分,用作理解,
check() {
        # Check that we're a privileged user
        [ `id -u` = 0 ] || exit 4
        # Check if acpid is executable
        test -x /usr/sbin/acpid || exit 5
}
start() {
        check
        # Check for kernel support
        [ -f /proc/acpi/event ] || exit 1
        echo -n $"Starting acpi daemon: "
        daemon /usr/sbin/acpid
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/acpid
        echo
        return $RETVAL
}
stop() {
        check
        echo -n $"Stopping acpi daemon: "
        killproc /usr/sbin/acpid
        RETVAL=$?
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/acpid
        echo
    return $RETVAL
}
restart() {
        stop
        start
}
reload() {
        check
        trap "" SIGHUP
        action $"Reloading acpi daemon:" killall -HUP acpid
        RETVAL=$?
        return $RETVAL
}

case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload)
        reload
        ;;
force-reload)
        restart
        ;;
restart)
        restart
        ;;
condrestart)
        if [ -f /var/lock/subsys/acpid ]; then
            restart
        fi
        ;;
status)
        status acpid
        RETVAL=$?
        ;;
*)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|force-reload}"
        RETVAL=2
esac

说明:
  创建了check\start\stop\restart\reload的函数,每个函数下面都有各自的命令集合,后面每个符合case选项的每执行一次函数就相当于执行函数内部的命。简化了脚本的结构。