case语句:
case语句为多选择语句(其实就是类似if多分支结构), 主要用于centos6的服务脚本里用于判断服务是start还是stop还是status等。
说明: python里没有case语句,python里用if多分支来实现. 但case语句也需要看懂结构, 不仅是shell里用,在数据库的SQL语句里也有case语句。
case var in # 定义变量;var代表是变量名
pattern 1) # 模式1;用 | 分割多个模式,相当于or
command1 # 需要执行的语句
;; # 两个分号代表命令结束
pattern 2)
command2
;;
pattern 3)
command3
;;
*) # 不满足以上模式,默认执行*)下面的语句
command4 # 这里可以不加;;符号
esac # esac表示case语句结束
######case语句对比if
case $sex in if [ $sex = 男 -o $sex = man ];then
男|man ) #如果sex变量为男或者man就输出 echo "帅哥"
echo "帅哥" elif [ $sex = 女 -o $sex = woman];then
;; echo "美女"
女|woman ) else
echo "美女" echo "性别有误"
;; fi
* )
echo "性别有误"
esac
函数:
通俗地说,将一组命令集合或语句形成一个整体, 给这段代码起个名字称为函数名。可以通过函数名来调用函数内的代码,达到代码重复利用的目的。
函数名() {
函数体(一堆命令的集合,来实现某个功能)
}
function 函数名() {
函数体(一堆命令的集合,来实现某个功能)
}
#######示例如下
function_name() {
代码
代码
}
function function_name() {
代码
代码
}
建议用第一种,不用写function,简单方便
示例演示
funct1() { # 函数名加()来定义函数,小括号是固定写法,大括号里面为函数体
echo 1
echo 2
echo 3 # 大括号里的三条命令就是函数主体
}
funct1 # 直接使用函数名字调用函数,将会执行函数主体内的内容
如下为服务器脚本示例,结合case和函数使用
[root@server ~]# vim /etc/init.d/new_sshd # 要创建到/etc/init.d/目录下
#!/bin/bash
# chkconfig: 2345 64 36
start() { # start函数
/usr/sbin/sshd # 调用/usr/sbin/sshd命令启动sshd服务
}
stop () { # stop函数
kill -15 $(cat /var/run/sshd.pid) # 通过pid文件查找pid,然后kill -15停进程
}
reload() { # reload函数
kill -1 $(cat /var/run/sshd.pid) # 通过pid文件查找pid,然后kill -1刷新
}
restart() { # restart函数里面调用stop和start的函数(函数的嵌套)
stop
start
}
status() { # status函数
if [ -e /var/run/sshd.pid ];then # 通过判断pid文件是否存在,从而得知服务是否启动
echo "sshd正在运行"
else
echo "sshd是停止状态"
fi
}
case "$1" in # $1变量回顾(shell第1天有讲),指执行脚本接的第一个参数
start ) # 如果$1的值为start,则调用start函数主体内的代码
start
;;
stop )
stop
;;
restart ) # 如果$1的值为restart
restart
;;
reload )
reload
;;
status )
status
;;
* ) # 如果$1的值不为start,stop,restart,reload,status其中之一,则执行下面的echo语句
echo "只支持(start|stop|restart|reload|status)"
esac