shell基础知识请参看:
程序如下:
#!/bin/sh
#建立默认搜索路径
PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
export PATH
#定义变量,变量包括有关service 程序的版本信息、使用方法、以及程序所在的
#basename命令去除$0所代表的文件名的目录部分和后缀名,只显示基本文件名
VERSION="`basename $0` ver. 0.91"
USAGE="Usage:`basename $0`<option>|
--status-all|\
[ service_name [ command|--full-restart ] ]"
SERVICE=
SERVICEDIR="/etc/init.d"
OPTIONS=
# $#表示命令参数的个数,如果只输入service,表示没有参数即$#为0
# 如果参数为0则条件成立,则执行本if语句并退出程序
# 2为标准错误流也是接到仿真终端的屏幕,所以屏幕上会显示USAGE中内容。
if [ $# -eq 0 ]; then
fi
cd /
#如果参数个数大于零,表示循环条件成立
while [ $# -gt 0 ]
do
#case表示多条件选择
#$1表示命令service的{dy}个参数
#如果service --help则此条件成立
#如果service --version则此条件成立
#如果其他情况则此条件成立
# *表示/etc/init.d下的所有文件名列表,
#所以/etc/init.d下有多少文件,就循环多少次
#显示/etc/init.d下除没有状态参数的命令文件外的其他命令文件status
#如果是SERVICE是function等,因为这些程序师没有status(状态)的。
#其他则可以,显示状态.比如SERVICE可以是httpd
#-x表示 检查/etc/init.d/httpd是否可执行
#如果SERVICE是httpd,下面的应该是/etc/init.d/httpd status
#service有两个参数,且第2个参数是--full-restart。
#SERVICE来自命令行的参数,比如SERVICE httpd --full-restart
#$1表示httpd
#所以SERVICE所代表的服务停止
#所以SERVICE所代表的服务启动
#$?表示启动服务后命令的执行状态。一般$?为1表示命令执行失败
#$?为0表示命令执行成功
#如果不满足上面的条件,即不是只有一个参数,也不是又两个参数;比如:
#即不属于service --status-all 或者也不属于service httpd
--full-restart情况
#比如输入的是service httpd restart
#{dy}次while循环 -z 条件成立
#在{dy}次while循环的情况下 SERVICE为httpd
#如果输入的是service httpd restart
则在第二次while循环时,OPTIONS则会获得restart
#shift 位置参数往前平移1个位置,也就是说$2的值会传给$1.$3的值传递$1.
#OPTIONS得到了$2的值,也就是OPTIONS为restart
done
#按照前面的思路SERVICE为httpd,-x 表示检测/etc/init.d/httpd是否可执行
if [ -x "${SERVICEDIR}/${SERVICE}" ]
then
#依据前面举得例子,shift使得OPTIONS平移,则会执行/etc/init.d/httpd restart
#如果条件不成立,比如service ht restart,以为/etc/init.d没有ht程序
else
fi
已投稿到: |
|
---|