在脚本中提供帮助是一种很好的编程习惯,这样方便其他用户(和您)使用和理解脚本。
查看一下我们实际中经常使用的脚本。 

请注意我们重点要学习的是方法如下: 
  6 case "$0" in 
  7 *start) 
  8 ;; 
  9 *) 
10 echo $"Usage: $0 {start}" 
11 exit 1 
12 ;; 
13 esac


这种方式也是在Linux的一些服务脚本中经常使用到的。例如我们输入错误的选项后会有帮助信息返回: 
# service network NoThisOption 
Usage: /etc/init.d/network {start|stop|restart|reload|status} 
或者: 
# service nothisservice 
nothisservice: unrecognized service 

很容易发现service也只是一个脚本,我们很轻松地查看它的代码。 
# file `which service` 
/sbin/service: Bourne shell script text executable 

下面我们就以在Linux、UNIX中经常用到的killall脚本来说明一下实现的手段。 

一、这个是在RHEL中提供的killall的脚本,用来杀死一些不允许强制停止的服务。 

# vim /etc/rc.d/init.d/killall 
  1 #! /bin/bash 
  2 
  3 # Bring down all unneeded services that are still running (there shouldn't 
  4 # be any, so this is just a sanity check) 
  5 
  6 case "$1" in 
  7 *start) 
  8 ;; 
  9 *) 
10 echo $"Usage: $0 {start}" 
11 exit 1 
12 ;; 
13 esac 
14 
15 
16 for i in /var/lock/subsys/* ; do 
17 # Check if the script is there. 
18 [ -f "$i" ] || continue 
19 
20 # Get the subsystem name. 
21 subsys=${i#/var/lock/subsys/} 
22 
23 # Networking could be needed for NFS root. 
24 [ $subsys = network ] && continue 
25 
26 # Bring the subsystem down. 
27 if [ -f /etc/init.d/$subsys.init ]; then 
28 /etc/init.d/$subsys.init stop 
29 elif [ -f /etc/init.d/$subsys ]; then 
30 /etc/init.d/$subsys stop 
31 else 
32 rm -f "$i" 
33 fi 
34 done 

二、下面的这个例子是使用函数来实现的,这样的内容更具有可读性,帮助的容量也可以更大 
  1 #!/bin/sh 
  2 # vim: set sw=4 ts=4 et: 
  3 
  4 help() 
  5 { 
  6 cat <<HELP 
  7 xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole 
  8 
  9 USAGE: xtitlebar [-h] "string_for_titelbar" 
10 
11 OPTIONS: -h help text 
12 
13 EXAMPLE: xtitlebar "cvs" 
14 
15 HELP 
16 exit 0 
17 } 
18 
19 # in case of error or if -h is given we call the function help: 
20 [ -z "$1" ] && help 
21 [ "$1" = "-h" ] && help 
22 
23 # send the escape sequence to change the xterm titelbar: 
24 echo -e "33]0;$107" 
25 # 

下面是我们需要理解其中重点的部分:

  6 cat <<HELP 
  7 xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole 
  8 
  9 USAGE: xtitlebar [-h] "string_for_titelbar" 
10 
11 OPTIONS: -h help text 
12 
13 EXAMPLE: xtitlebar "cvs" 

重点说明一下: 
这种帮助的语法结构被叫做Here Docoments 
cat <<HELP 
文本内容 
HELP 
任何出现在两个HELP之间的文本内容,但请注意如果出现'$var'的内容会被替换,除非是'$'用'\' 转义了。 

但下面的Here Docoments结构会抑制变量被替换。 
cat <<'HELP' 
文本内容 
HELP 

实际上Here Docomnets还有第三种结构,它可以把文本内容行前边的TAB键都屏蔽掉,目的是为了增加代码的可读性,但又不想输入的文本前边有空白。听起来意义不是很大。 
cat <<-HELP 
文本内容 
HELP 

当然Here Docoments不只与cat连用,还可以与其它程序echo ftp expr bc db 等等等等交互。有好的技巧不要忘了告诉我哦!