运维脚本规范

51运维脚本规范

目录

前言:

一、命名规范

1.1脚本命名

1.2变量命名

1.3参数命名

1.4函数命名规范

二、编写规范

2.1.基本信息

2.2代码注释规范

2.3空行

2.4缩进

2.5续行

2.6输出

2.7 调用系统变量

2.8 脚本中使用命令

2.9 输入与退出

三、调试

3.1 错误退出

3.2脚本语法检查

3.3调试

前言:

本规范目的是保证运维成员编码的统一。

本规范的核心规则就是脚本的命名规则。

此规范必要是可以打破。

一、命名规范

1.1脚本命名

脚本的名字需与其功能保持一致,让人一看名字就大概知道是干什么用。

1.2变量命名

变量的命名应遵循某种规范,使用"_"作为单词间的分隔符,单词尽量使用全名

如:

    MYSQL_SOCK_KEY=0 
    Mysql_Tmp=/opt/tmp
    MysqlTmp=/opt/tmp

1.3参数命名

参数命名原则全用小写

如:

    mysql_socket

1.4函数命名规范

函数表示的是一个动作,所以它的结构应该是动词+名词,动词必须小写,后面的名称首字母大写,如getMaterialCode。函数命名尽量不要使用缩写,而且它的名称应该使人一目了然,能够从名称就知道这个函数的功能。当函数名称不足以表达其功能时,应使用在函数头部加上让调用者足够明白的注释。

如下面例子:

getHostName(){
    cat /etc/sysconfig/network|awk -F"=" "/HOSTNAME/"‘{print$2}‘
}

二、编写规范

2.1.基本信息

(1)在每个脚本模块的最上面,勿忘记添加开头#!/bin/bash

(2)脚本编写人(使用英文名或中文拼音缩写)

(3)脚本创建时间、

(4)脚本修改时间、修改说明、输入参数、输出参数、

(5)脚本描述等。

如下面例子:

#!/bin/bash
# -------------------------------------------------------------------------------
# Filename:    check_mem.sh
# Revision:    1.1
# Date:        2015/02/10
# Author:      Gong
# Email:       [email protected]
# Description: Plugin to monitor the memory of the system
# -------------------------------------------------------------------------------
# Copyright:   2009 (c) Ajian
# License:     GPL
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
-------------------------------------------------------------------------------
#Version 1.0
#The first one , can monitor the system memory
#Version 1.1
#Modify the method of the script ,more fast

可通过.vimrc文件编辑脚本时,自动在文件头加信息

autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()" 
func SetTitle()
    if &filetype == ‘sh‘
        call setline(1, "\#!/bin/bash") 
        call append(line("."),"\#########################################################################") 
        call append(line(".")+1, "\# File Name: ".expand("%")) 
        call append(line(".")+2, "\# Author: gongy") 
        call append(line(".")+3, "\# Mail:" ) 
        call append(line(".")+4, "\# Created time: ".strftime("%Y-%m-%d %H:%M:%S")) 
        call append(line(".")+5, "\# Last modified: ".strftime("%Y-%m-%d %H:%M:%S"))
        call append(line(".")+6, "\# Description: ") 
        call append(line(".")+7, "\#########################################################################") 
        call append(line(".")+8, "") 
    else
        call setline(1, "/*************************************************************************") 
        call append(line("."),  "  * File Name: ".expand("%")) 
        call append(line(".")+1, "  * Description: ") 
        call append(line(".")+2, "  * Author: chu") 
        call append(line(".")+3, "  * Mail: ") 
        call append(line(".")+4, "  * Created time: ".strftime("%Y-%m-%d %H:%M:%S")) 
        call append(line(".")+5, "  * Last modified: ".strftime("%Y-%m-%d %H:%M:%S")) 
        call append(line(".")+6, " ************************************************************************/") 
        call append(line(".")+7, "")
    endif
    autocmd BufNewFile * normal G
endfunc
autocmd BufWritePre,BufWritePre,FileWritePre  *.sh    ks|call LastModified()|‘s  
func LastModified()
        if line("$") > 20
                let l = 20
        else 
                let l = line("$")
        endif
        exe "1," . l . "g/Last modified: /s/Last modified: .*/Last modified:".strftime("%Y-%m-%d %H:%M:%S")
endfunc

2.2代码注释规范

注释务必做到准确简洁,能够充分表达代码实现的功能。

例如:

#get system name.
getHostName(){
    cat /etc/sysconfig/network|awk -F"=" "/HOSTNAME/"‘{print$2}‘
}

2.3空行

空行是区分代码块与块的间隔,在函数之间必须加上空行;而在函数内部,变量声明块和实现块(实现块指除变量声明外的其他代码)要使用空行来间隔,实现块的内部,通过空行来标识一个功能段。

2.4缩进

必须严格执行缩进,变量声明块不缩进,实现块必须保证全部缩进(不可能有实现块是行首对齐的);对于基本的控制结构来说,必须要有缩进,如IF、DO、WITH、FOR、WHILE块。

2.5续行

对于过长的语句来说,必须使用续行,续行位置要有明显意义,例如,sql ="SELECT [code],[name] FROM [Person]"_&"WHERE [code] LIKE‘001%‘"。

对于使用比较频繁的代码块来说,最好将其写成函数,并尽量将功能复杂的大函数拆分成小函数。

2.6输出

非交互式脚本,后台运行的脚本,脚本不允许输出内容到屏幕上,一律定向到/dev/null

例如:

    SEND_MSG=curl "http://alarm.51.com&xxxxx"
    $SEND_MSG  &> /dev/null

2.7 调用系统变量

脚本中需要调用系统变量时,需要在脚本中重新定义该变量

例如:

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    JAVA_HOME=/usr/local/JAVA/
    export PATH=$JAVA_HOME:$PATH

2.8 脚本中使用命令

脚本中使用系统命令时,需在命令行正确执行,测试得出正确结果,再将命令行中执行正确的命令粘贴至脚本中

2.9 输入与退出

脚本需要从参数或者直接脚本中定义调用文件时,需要判断文件是否存在

例如:

socket_file=`cat /etc/my.cnf`|grep ^"\bsocket\b"|head -1|awk -F"=" ‘{print $NF}‘
if [[ ! -S $socket_file ]];then
    echo "获取socket失败...请检查/etc/my.cnf"
    echo "脚本退出..."
    exit 1
fi

三、调试

3.1 错误退出

 set -e

脚本非注释开头加上set -e,当脚本执行错误时,中断脚本执行,防止脚本发生死循环

3.2脚本语法检查

  set -n

脚本非注释开头加上set -n,读一遍脚本中的命令但不执行,验证脚本是否能正常执行

3.3调试

   set -x

脚本非注释开头加上set -x,判断哪里出错。

时间: 2024-08-04 21:20:36

运维脚本规范的相关文章

Linux Shell 运维脚本功底积累

1.删除Linux远程用户连接会话 [[email protected] logs]# w 10:45:28 up 15 days, 16:23, 4 users, load average: 0.00, 0.00, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 - Sun21 4days 0.00s 0.00s -bash root pts/0 192.168.1.2 09:11 0.00s 0.07s 0

python常用运维脚本实例【转】

file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先open是内置函数,使用方式是open('file_name', mode, buffering),返回值也是一个file对象,同样,以写模式打开文件如果不存在也会被创建一个新的. f=open('/tmp/hello','w') #open(路径+文件名,读写模式) #读写模式:r只读,r+读写,

运维脚本:python实现批量IP端口扫描

运维脚本:python实现批量IP端口扫描 专注网络运维,只发实用干货 扫描二维码关注公众 今天不想更新,发一篇存货,分享一小段python代码给大家,能实现简单的批量端口扫描,废话不多说,先上代码: =========================================================== # -*- coding: utf-8 -*- import socket import time import xlrd import threading hostfile =

sql server自动化运维脚本

数据库运维中盛传一个小段子,我误删除了数据库,改怎么办?有备份还原备份,没有备份就准备简历!听起来有趣但发生在谁身上,谁都笑不起来.接触了很多的客户发现90%客户的运维策略都不是很完善.本篇就分享一些常规的运维脚本,本篇没有涉及到的或不足的也请大家留言无私贡献深藏多年的脚本,谢谢! 邮件 邮件主要用来监控作业是否运行成功,如果您已经配置了类似zabbix等软件请忽略. 配置邮件服务 --SQL Server 并没有内置邮件服务器(Mail Server),它跟我们发送邮件一样,需要用户名和密码通

运维脚本

参考链接:https://github.com/SwordfallYeung/BigData_AutomaticDeploy 自动化部署:https://gitee.com/lucky110100/sloth/tree/master Linux命令行与shell脚本编程大全案例:https://github.com/fengyuhetao/shell shell常用分析命令和脚本:https://github.com/zhwj184/shell-work linux 常用脚本:https://g

自动化运维脚本语言之expect实践学习(1)

一.expect简介 expect是一种简单的基于Tcl的脚本语言工具,一个可实现自动交互功能的软件套件,其功能就是进行自动化的人机交互:也能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序,根据脚本内容expect可以知道程序会提示或反馈什么内容以及什么是正确的应答:它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. shell功能虽然强大,但是不能实现有交互功能的多机器之间的操作例如ssh和ftp,而expect可以帮助我们来实现. 主

<zz>【Python运维】简单的Python运维脚本

from http://www.cnblogs.com/yixianclove/p/5824747.html 背景 最近在Windows 10上使用Linux子系统,发现它有一个非常坑爹的特点:Linux子系统是没有开机关机状态的,每次进入Bash shell就自动载入,退出后Linux子系统的所有进程都会被关闭,如果你撞了Mysql之类的服务要想随时运行的话就要保持Bash shell的随时开启,更坑的是这些服务并不会随之进入Bash shell而自动启动, 我只好写一个Python脚本用于管

运维脚本:索引统计

数据库引擎是高度优化的闭环系统,基于执行计划的反馈,查询优化器在一定程度上自动优化现有的执行计划.查询优化的核心是索引优化,数据库引擎通过计数器统计关于索引操作的数据,统计的信息包括:使用次数.物理存储.底层操作的计数,以及缺失索引等,这些统计数据存储在内存中,是数据库引擎执行情况的真实反馈,高度概括了索引的执行情况,有意识地利用索引的统计信息,有针对性地优化现有的业务逻辑代码,调整查询的执行计划,能够提高数据库的查询性能. 一,统计索引的使用次数 在用户成功提交查询语句时,执行计划中每一个单独

python多线程运维脚本

需求,有一个IP列表文件 ip.txt,里面有1000个ip,那么我要用python同时来处理这1000个IP. 先看ip.txt 192.168.1.1 192.168.1.2 192.168.1.3 ...... 192.168.1.1000 多线程并发脚本 #!/usr/bin/python import threading import sys import os import time def ssh_cmd(ip): //定义一个ssh_cmd函数 用于发呆5秒,输出ip time.