对于if 语法 我们不过多做介绍,这里直接上实例,以开发rsync服务启动脚本为例,先对rsync做个简单介绍

  1. [root@backup ~]# rpm -qa|grep rsync
  2. rsync-3.0.-.el6.x86_64
  3. [root@backup ~]#
  4. [root@backup ~]# cat /etc/rsync
  5. rsyncd.conf rsync.password
  6. [root@backup ~]# cat /etc/rsyncd.conf
  7. #Rsync server
  8. uid = rsync
  9. gid = rsync
  10. use chroot = no
  11. max connections =
  12. timeout =
  13. pid file = /var/run/rsyncd.pid
  14. lock file = /var/run/rsync.lock
  15. log file = /var/log/rsyncd.log
  16. ignore errors
  17. read only = false
  18. list = false
  19. hosts allow = 172.16.80.0/
  20. hosts deny = 0.0.0.0/
  21. auth users = rsync_backup
  22. secrets file = /etc/rsync.password
  23. ###########
  24. [backup]
  25. comment = backup by martin
  26. path = /backup
  27.  
  28. [root@backup ~]# cat /etc/rsync
  29. rsyncd.conf rsync.password
  30. [root@backup ~]# cat /etc/rsync.password
  31. rsync_backup:
  32. [root@backup ~]#
  33. [root@backup ~]# rsync --daemon #启动rsync
  34. [root@backup ~]# netstat -lntup|grep rsync
  35. tcp 0.0.0.0: 0.0.0.0:* LISTEN /rsync
  36. tcp ::: :::* LISTEN /rsync

[root@backup ~]# pkill rsync  #停止rsync
[root@backup ~]# netstat -lntup|grep rsync

判断rsync服务是否启动的方法

常规方法有检测端口以及进程是否存在,可以当服务启动时,创建一个锁文件 /var/lock/subsys/  而当服务停止时,就删除这个锁文件,这样就可以通过判断这个文件有无来确定服务是否是启动的状态,这是一些系统脚本常用的手法,脚本开发如下

  1. [root@backup ~]# cat rsyncd.sh
  2. #!/bin/bash
  3. # chkconfig: 80
    # 2345是linux的启动运行级别,20表示开始启动顺序,80表示脚本停止顺序,这两个数字都是不超过99的数字,应用服务一般要考后启动为佳,越早停止越好
  4. if [ $# -ne ];then
  5. echo $"usage: $0 {start|stop|restart}"
  6. exit
  7. fi
  8.  
  9. if [ "$1" = "start" ];then
  10. rsync --daemon
  11. sleep
  12. if [ `netstat -lntup|grep rsync|wc -l` -ge ];then
  13. echo "rsyncd is started."
  14. fi
  15.  
  16. elif [ "$1" = "stop" ];then
  17. pkill rsync &>/dev/null
  18. sleep
  19. if [ `netstat -lntup|grep rsync|wc -l` -eq ];then
  20. echo "rsyncd is stopped."
  21. fi
  22.  
  23. elif [ "$1" = "restart" ];then
  24. pkill rsync
  25. sleep
  26. killpro=`netstat -lntup|grep rsync|wc -l`
  27. rsync --daemon
  28. sleep
  29. startpro=`netstat -lntup|grep rsync|wc -l`
  30. if [ $killpro -eq -a $startpro -ge ];then
  31. echo "rsyncd is restarted."
  32. fi
  33.  
  34. else
  35. echo $"usage: $0 {start|stop|restart}"
  36. exit
  37. fi
  38. [root@backup ~]#
  39. [root@backup ~]#
  40. [root@backup ~]# ps -ef|grep rsync
  41. root : pts/ :: grep rsync
  42. [root@backup ~]#
  43. [root@backup ~]#
  44. [root@backup ~]# sh rsyncd.sh start
  45. rsyncd is started.
  46. [root@backup ~]#
  47. [root@backup ~]# ps -ef|grep rsync
  48. root : ? :: rsync --daemon
  49. root : pts/ :: grep rsync
  50. [root@backup ~]# netstat -lntup |grep rsync
  51. tcp 0.0.0.0: 0.0.0.0:* LISTEN /rsync
  52. tcp ::: :::* LISTEN /rsync
  53. [root@backup ~]#
  54. [root@backup ~]# sh rsyncd.sh restart
  55. rsyncd is restarted.
  56. [root@backup ~]# netstat -lntup |grep rsync
  57. tcp 0.0.0.0: 0.0.0.0:* LISTEN /rsync
  58. tcp ::: :::* LISTEN /rsync
  59. [root@backup ~]# sh rsyncd.sh stop
  60. rsyncd is stopped.
  61. [root@backup ~]# netstat -lntup |grep rsync

使用shell函数封装的方法来优化上面的脚本,改良后的脚本如下

  1. [root@backup ~]# cat /etc/init.d/rsyncd
  2. #!/bin/sh
  3. # chkconfig:
  4. . /etc/init.d/functions
  5.  
  6. if [ $# -ne ];then
  7. echo $"USAGE: $0 {start|stop|restart}"
  8. exit
  9. fi
  10.  
  11. start(){
  12. rsync --daemon
  13. sleep
  14. if [ `netstat -lntup|grep rsync|wc -l` -ge ];then
  15. action "rsyncd is started." /bin/true
  16. else
  17. action "rsyncd is stopped." /bin/false
  18. fi
  19. }
  20.  
  21. stop(){
  22. killall rsync &>/dev/null
  23. sleep
  24. if [ `netstat -lntup|grep rsync|wc -l` -eq ];then
  25. action "rsyncd is stopped." /bin/true
  26. else
  27. action "rsyncd is started." /bin/false
  28. fi
  29. }
  30.  
  31. restart(){
  32. stop
  33. sleep
  34. start
  35. }
  36.  
  37. case "$1" in
  38. start)
  39. start
  40. ;;
  41. stop)
  42. stop
  43. ;;
  44. restart)
  45. restart
  46. ;;
  47. *)
  48. echo "echo "USAGE: $ {start|stop|restart}""
  49. esac

shell if 条件语句实践的更多相关文章

  1. Shell 编程 条件语句

    本篇主要写一些shell脚本条件语句的使用. 条件测试 test 条件表达式 [ 条件表达式 ] 文件测试 -d:测试是否为目录(Directory). -e:测试文件或目录是否存在(Exist). ...

  2. Linux就该这么学--Shell脚本条件语句(二)

    1.for条件语句 先读取多个不同的变量值,然后逐一执行同一组命令. 从列表文件中读取主机地址,逐个测试是否在线. 从ipadds.txt中读取主机地址后赋值给HLIST变量后逐个ping列表中的主机 ...

  3. Linux就该这么学--Shell脚本条件语句(一)

    1.条件测试语句能够让Shell脚本根据实际工作灵活调整工作内容,例如判断系统的状态后执行指定的工作,或创建指定数量的用户,批量修改用户密码,这些都可以让Shell脚本通过条件测试语句完成. if条件 ...

  4. SHELL 中条件语句的运用 if for 条件测试语句

    if条件测试语句可以让脚本根据实际情况自动执行相应的命令.从技术角度来讲,if语句分为单分支结构.双分支结构.多分支结构:其复杂度随着灵活度一起逐级上升. if条件语句的单分支结构由if.then.f ...

  5. Shell if条件语句

    1.if条件语句:设定一个条件如果怎么,然后怎么样. (1)-gt大于.-lt小于.-ge大于等于.-le小于等于.-eq等于.-ne不等于. (2)[]内是包括变量时所使用的. (3)-f文件.-n ...

  6. Shell cace条件语句

    cace条件语句,取相对应的多个值,进行输出. 语句:case语句:case $n in 回车\  值)回车\ 命令 :: 值)命令 esac case $1 in start) echo “启动” ...

  7. Shell Scripts - 条件语句,case语句,function功能

    修改之前的代码 1.判断 $1 是否为 hello,如果是的话,就显示 "Hello, how are you ?":     2.如果没有加任何参数,就提示使用者必须要使用的参数 ...

  8. shell脚本中的case条件语句介绍和使用案例

    #前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...

  9. shell脚本进阶之条件测试与条件语句

       接着上篇博客,今天整理一下关于条件测试和条件语句方面的知识. shell脚本进阶之条件测试    在编写shell脚本时,经常需要对一些条件进行判断,可以使用测试命令test辅助完成测试过程.t ...

随机推荐

  1. Cookie 与 Session 的区别

    Cookie与Session的区别 cookie的简介 cookie是Web服务器保存在客户端的一系列文本信息 cookie的作用 对特定对象的追踪 统计网页浏览次数 简化登录 安全性能:容易信息泄露 ...

  2. 避免修改Android.mk添加cpp文件路径

    手工输入项目需要编译的cpp文件到Android.mk里的缺点 1)繁琐,如果cpp文件很多,简直无法忍受 2)手工输入过程中容易出现错误 3)如果cpp文件更改名称,需要修改android.mk文件 ...

  3. Vue项目中遇到的一些问题总结

    一.开发环境使用Ajax请求,报错  网上查的资料,在config中的index.js这样设置 proxyTable:{ '/api':{ target:'', //此处为你的API接口地址 chan ...

  4. SummerVocation_Learning--java的String类运用

    题目: 编写一个程序,输出一个字符串中的大写字母数,小写字母数,及其它字母数. 思路1: 可以先遍历整个字符串,在判断每个字符的类型. public class TestString { public ...

  5. 第9课 文章模块分析及建表 Thinkphp5商城第四季

    目录 文章模块的分析 表结构 文章模块的分析 表结构 CREATE TABLE `tp_cate` ( `id` smallint(6) NOT NULL AUTO_INCREMENT COMMENT ...

  6. C++构造函数实例——拷贝构造,赋值

    #define _CRT_SECURE_NO_WARNINGS //windows系统 #include <iostream> #include <cstdlib> #incl ...

  7. DFS:POJ1088-滑雪(记忆化搜索)

    题目: 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 97666 Accepted: 37055 Description ...

  8. Codeforces 35E Parade 扫描线

    题意: 给出\(n\)个底边在\(x\)轴上的矩形,求外面的轮廓线顶点. 分析: 将每个矩形拆成两个事件:\(\\\{ l, y, + \\\}\)和\(\\\{ r, y, - \\\}\)分别表示 ...

  9. 朴素贝叶斯python小样本实例

    朴素贝叶斯优点:在数据较少的情况下仍然有效,可以处理多类别问题缺点:对于输入数据的准备方式较为敏感适用数据类型:标称型数据朴素贝叶斯决策理论的核心思想:选择具有最高概率的决策朴素贝叶斯的一般过程(1) ...

  10. 手机端sticker布局,底部按钮在屏幕底部

    <template> <div class="product-detail-container"> <div class="detail&q ...