case语法案例

制作nginx启停脚本

1.条件:

启动服务命令/application/nginx/sbin/nginx

停止服务命令/application/nginx/sbin/nginx -s stop

实现/etc/init.d/nginxd {start|stop|restart},并可chkconfig开机自起

2.思路:

1)nginx启动成功会有一个PID文件,所以根据判断该文件是否存在来确定nginx是开启还是关闭状态

2)通过脚本传入参数start或stop,通过case语句取值判断

3)为了专业,调用系统函数库的action函数

4)对函数及命令允许的返回值进行处理,是脚本看起来更专业、规范

5)通过chkconfig来管理nginx脚本,实现开机自启动

3.脚本

  • cat /etc/init.d/nginxd
#!/bin/sh
# chkconfig: 2345 40 98
# description: Start/Stop Nginx server
path=/application/nginx/sbin
pid=/application/nginx/logs/nginx.pid
RETVAL=0
. /etc/init.d/functions
start(){
if [ ! -f $pid ];then
$path/nginx
RETVAL=$?
if [ $RETVAL -eq 0 ];then
action "nginx is started" /bin/true
return $RETVAL
else
action "nginx is started" /bin/false
return $RETVAL
fi
else
echo "nginx is running"
return 0
fi
}
stop(){
if [ -f $pid ];then
$path/nginx -s stop
RETVAL=$?
if [ $RETVAL -eq 0 ];then
action "nginx is stopped" /bin/true
return $RETVAL
else
action "nginx is stopped" /bin/false
return $RETVAL
fi
else
echo "nginx is no running"
return $RETVAL
fi
}
case "$1" in

start)

start

RETVAL=$?

;;

stop)

stop

RETVAL=$?

;;

restart)

stop

sleep 1

start

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|restart|reload}"

exit 1

esac

exit $RETVAL

chomod +x /etc/init.d/nginxd

  • 参考脚本

    linux系统内部有很多值得学习的参考的脚本,空了请研究如下脚本

    • /etc/init.d/rpcbind
    • /etc/init.d/functions
    • /etc/rc.d/rc.sysinit

添加删除openvppn用户的脚本

1.实现要求

1) 命令用法:

实现通过传参的方式往/etc/openvpn_authfile.conf里添加用户
USAGE: sh adduser {-add|-del|-search} username
2) 传参要求:

-add 表示添加后面接的用户名

-del 表示删除后面接的用户名

-search 表示查找后面接的用户名
3) 细节要求

如果用户存在则不能添加,不存在则不能删除,查找结果要给用户明确提示

/etc/openvpn_authfile.conf不能被所有外部用户直接删除及修改

2.具体脚本

  • cat /server/scripts/b8.sh
#!/bin/bash
. /etc/init.d/functions
FILE_PATH=/etc/openvpn_authfile.conf
[ -f $filepath ] || touch $filepath
usage(){
echo "usage:`basename $0` {-add|-del|-search} username"
}
if [ $UID -ne 0 ]
then
echo "you are not root,must use root"
exit 1
fi
if [ $# -ne 2 ]
then
usage
exit 2
fi
case "$1" in
-add|-a)
shift #位置参数左移,$2替换$1
if grep "^$1$" ${FILE_PATH} >/dev/null 2>&1
then
action $"vpnuser,$1 is exist" /bin/false
exit
else
chattr -i ${FILE_PATH}
/bin/cp ${FILE_PATH} ${FILE_PATH}.$(date +%F%T)
echo "$1" >>${FILE_PATH}
[ $? -eq 0 ] && action $"add $1" /bin/true
chattr +i ${FILE_PATH}
fi
;;
-d|-del)
shift
if [ `grep "\b$1\b" ${FILE_PATH}|wc -l` -lt 1 ]
then
action $"vpnuser,$1 is not exist" /bin/false
exit
else
chattr -i ${FILE_PATH}
/bin/cp ${FILE_PATH} ${FILE_PATH}.$(date +%F%T)
sed -i "/^${1}$/d" ${FILE_PATH}
[ $? -eq 0 ] && action $"DEL $1" /bin/true
chattr +i ${FILE_PATH}
exit
fi
;;
-s|-search)
shift
if [ `grep -w "$1" ${FILE_PATH}|wc -l` -lt 1 ]
then
echo $"vpnuser,$1 is no exist."
exit
else
echo $"vpnuser,$1 is exist."
exit
fi
;;
*)
usege
exit
;;
esac

注意本例中用到的grep三种精确过滤方法

grep -w "oldboy" /file

grep "\bodlboy\b" /file

grep "^oldboy$" /file

case语法案例的更多相关文章

  1. case语法练习脚本之判断

    case语法练习脚本之判断 #!/bin/bash read -p "请输入一个字符,并按enter键确认:" key case "$key" in [a-z] ...

  2. bash 中的case语法

    CASE语法格式备忘 case $variable-name in pattern1) command1 ... .... commandN ;; pattern2|pattern3|pattern4 ...

  3. nodeJs学习-10 模板引擎 ejs语法案例

    ejs语法案例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  4. Shell case语法结构解析

    case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 ...

  5. Verilog RTL优化策略(一):推荐使用assign语法替代if-else和case语法

    参考 <手把手教你设计CPU--RISC-V处理器篇> 先给出不用if-else和case的原因 Verilog中的if-else和case语法存在两大缺点: 不能传播不定态X: 会产生优 ...

  6. HiSql 实现case语法操作 新一代无实体ORM框架

    HiSql 实现case语法操作 在SqlServer,Oralce,Hana,PostGreSql,MySql 这些数据都支持SQL case语法,平常在实现业务开发中也会常用到,那么HiSql对于 ...

  7. SQL Server高级内容之case语法函数

    1.Case函数的用法  (1)使用类似:switch-case与if-else if. (2)语法: case [字段] when 表达式 then 显示数据 when 表达式 then 显示数据 ...

  8. 关于Ruby常用语法案例累积

    变量问题: 类变量和方法变量的区别是什么? 类变量:可以直接使用 方法变量:需要实例化后,才能使用该变量 案例一: class Person @@name = "Tom" @@na ...

  9. [lua]尝试一种Case语法糖

    function CaseT(arg) function proxy(caller) caller.yield(r) end -- proxy return function (cond) if (c ...

  10. case语法2

    case流程控制语句在linux中有其独到的一面,使得在编程过程中能够在脚本编写的过程中具备多个选项功能,使其功能多样化,其具备简单,快速的特点. 一.case流程语句结构图 根据流程图可以知道,在所 ...

随机推荐

  1. angular Ionic CLI组件建立,使用图标,弹窗,按钮,卡片,列表,无尽滚动,刷新

  2. win32com操作word API精讲 第十集 Paragraphs & Paragraph接口 (一)

    本课程<win32com操作word API精讲&项目实战>以视频为主,文字为辅,公众号ID:一灯编程 在word编程中,Range和Paragraph(s)接口无愧于劳模接口的称 ...

  3. java入门与进阶-P1.1+P1.2

    计算机与编程语言 计算机如何解决问题 !-- 首先计算机他是不知道自己需要去做什么的,它需要按照你所说的步骤一步一步进行直到结束 "请给我一杯水" 1.转身走到厨房; 2.找到一个 ...

  4. super与this关键字图解-Java继承的三个特点

    super与this关键字图解 父类空间优先于子类对象产生 在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身.目的在于子类对象中包含了其对应的父类空 间,便可以包含其父类的成员,如果父类成 ...

  5. Unity之UGUI鼠标进入离开&&拖拽实现

    Unity之UGUI鼠标进入离开&&拖拽实现 前言: __小黑最近在写项目的时候就有个疑惑,UGUI中的Button组件,他的点击事件是怎么实现的!?我们自己能不能写一个!?之后在项目 ...

  6. 程序员大杀器?带你玩转ChatGPT

    作者:京东零售 栗鸿宇 ChatGPT简介 ChatGPT是一款基于AI技术的机器人对话软件,它能够与用户进行智能化的聊天对话,帮助用户解决日常生活中的问题,为用户提供丰富的信息和服务.它集成了海量知 ...

  7. 【已解决】将jsp文件在浏览器打开直接出现代码,在浏览器出现本地地址,tomcat报错

    问题背景: 导入了一个项目直接打开可以,但是想跟一遍代码,把配置文件全部整理成为一个springmvc的基础配置文件 跟着配置到自己tomcat就不管怎样都是下面的截图  希望可以帮到一起报错的朋友快 ...

  8. STL中的智能指针(Smart Pointer)及其源码剖析: std::unique_ptr

    STL中的智能指针(Smart Pointer)及其源码剖析: std::unique_ptr 和 std::auto_ptr一样,std::unique_ptr也是一种智能指针,它也是通过指针的方式 ...

  9. JZOJ 3494. 【NOIP2013模拟联考13】线段(segment)

    题目 数轴上有很多单位线段,一开始时所有单位线段的权值都是 \(1\).有两种操作,第一种操作将某一区间内的单位线段权值乘以 \(w\),第二种操作将某一区间内的单位线段权值取 \(w\) 次幂.并且 ...

  10. 【多线程与高并发】- 浅谈volatile

    浅谈volatile 目录 浅谈volatile 简介 JMM概述 volatile的特性 1.可见性 举个例子 总结 2.无法保证原子性 举个例子 分析 使用volatile对原子性测试 使用锁的机 ...