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. 關於scanf()的使用

    要使用scanf函數進行輸入: 1.如果用scanf()要輸入讀取基本變量的值,需要加&. 2.如果用scanf()讀取的是把字符串讀入字符數組中,則不需要加& 1 #include& ...

  2. C#代码整洁之道读后总结与感想

    1. 基本信息 C#代码整洁之道:代码重构与性能提升 ,英文名为Clean Code in C#. 作者:[英] 詹森·奥尔斯(Jason Alls) 著,刘夏 译 机械工业出版社,2022年4月出版 ...

  3. get请求与post请求的区别

    大小限制 get请求一般通过url传输的数据量时比较少的,最多传3~5个参数,如果要传递多个参数,要在url地址中利用"&"符号拼接多个参数, 栗子:/test/demo. ...

  4. Python源文件的编码

    Python源文件的编码 入门教程->2.2.1 源文件的字符编码 参考官网:https://docs.python.org/zh-cn/3.9/tutorial/interpreter.htm ...

  5. myatbis的一个好的封装

    package com.pj.project4sp; import org.springframework.beans.factory.annotation.Autowired; import org ...

  6. Linux 安装 CentOS7

    1.linux 下载 http://mirrors.aliyun.com/centos/7/isos/x86_64/ centos-7-isos-x86_64安装包下载_开源镜像站-阿里云 (aliy ...

  7. Altium Designer v23.0.1.38图文详解

    Altium Designer (AD)  最新安装河蟹教程 ,ltium designer  显著地提高了用户体验和效率,利用时尚界面使设计流程流线化,同时实现了前所未有的性能优化.使用64位体系结 ...

  8. 字符串(str)内置方法补充、列表(list)内置方法、可变类型与不可变类型、队列和栈

    目录 一.字符串(str)的内置方法(补充) 了解方法 二.列表(list)的内置方法 三.可变类型与不可变类型 四.队列和栈 一.字符串(str)的内置方法(补充) # upper()把当前字符串中 ...

  9. Docker全方位攻略与自动化运维

    介绍 Docker Registry(Docker注册中心)是一个管理Docker容器镜像存储和交付的应用程序.注册中心集中容器镜像并减少开发人员的构建时间.Docker镜像通过虚拟化保证相同的运行环 ...

  10. 【前端】js实现图片自适应

    一.问题分析 既然要实现图片自适应,那就要对不同的图片尺寸进行分类处理,我最开始是分了5类 对于长宽都不超过的情况 -- 应该不改变图片本身比例 对于长宽都超过的情况 -- 应该是根据图片比例进行缩小 ...