请注意我们重点要学习的是方法如下:
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
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 等等等等交互。有好的技巧不要忘了告诉我哦!