shell脚本规范

前言:一个标准的shell脚本包括bin、conf、log三个文件夹。

1.bin包含脚本的具体内容。

2.conf包含脚本需要获取的配置。

3.log包含脚本执行过程有无错误的log和跟业务相关的log。

编写脚本的具体过程

下面以curl+post上传脚本为例

Vim  backstage_curlpost_send_zip.sh

#!/bin/bash

#进入脚本目录

cd`dirname $0`

#定义脚本默认错误存放

log_path_flag=../logs

default_error_path=$log_path_flag/defaultlogs

default_error_file=$default_error_path/defaultposterror

if [ ! -d $default_error_path ];then

mkdir -p $default_error_path

fi

exec2>>$default_error_file

#定义json文件

json_path=../conf

json_file=`find$json_path -type f `

#判断json文件是否存在

if [ ! -f $json_file ];then

 echo `date +"%Y-%m-%d%H:%M:%S"`,json no such file >>$default_error_file

 exit

fi

#解析json

function get_value (){

keytmp=$1\"\:\"

cat $json_file |seds#"^M"##g|tr ‘\n‘ ‘ ‘|sed s#[[:space:]]##g|awk -F "$keytmp"‘{print $2}‘|awk -F ‘"‘ ‘{print $1}‘

}

send_runing_log=`get_valuesend_runing_log`

success_log=`get_valuepost_audit_log`              #正确日志

curlerror=`get_valuecurltmptxt_save`       

zip_copy_path=`get_valuefile_posting_path` #发送端全路径

#根据json初始化log路径

if [ ! -n $send_runing_log ];then

echo `date +"%Y-%m-%d%H:%M:%S"`,send_runing_log value is null,palse check shell or json>>$default_error_file

fi

send_runing_log_path=$log_path_flag

if [ ! -d $send_runing_log_path];then

mkdir -p $send_runing_log_path

fi

#检查post_audit_log,curltmptxt_save,file_posting_pathjson值是否为空

echo `date +"%Y-%m-%d%H:%M:%S"`,正在检查post_audit_log,curltmptxt_save,file_posting_pathjson值是否为空......>>$log_path_flag/$send_runing_log

declare -a parameter_mos=(success_log curlerror zip_copy_path )

for (( parameteri = 0; parameteri< ${#parameter_mos[@]}; ++parameteri ))

do

        tmp_value=${parameter_mos[parameteri]}

      if[ ! -n "${!tmp_value}" ];then

      echo"`date +"%Y-%m-%d %H:%M:%S"`,${parameter_mos[parameteri]} valueis null,palse check shell or json" >>$log_path_flag/$send_runing_log

      exit

      fi

done

curlerror_tmp_save=../tmp

if [ ! -d $curlerror_tmp_save ];then

mkdir -p $curlerror_tmp_save

fi

echo `date +"%Y-%m-%d%H:%M:%S"`,检查完成 >>$log_path_flag/$send_runing_log

#初始化log路径

echo `date +"%Y-%m-%d%H:%M:%S"`,正在初始化log路径......>>$log_path_flag/$send_runing_log

echo `date +"%Y-%m-%d%H:%M:%S"`,初始化log路径完成 >>$log_path_flag/$send_runing_log

#判断file_posting_path是否存

echo `date +"%Y-%m-%d%H:%M:%S"`,正在判断file_posting_path是否存在......>>$log_path_flag/$send_runing_log

if [ ! -d $zip_copy_path ];then  

echo "`date +"%Y-%m-%d%H:%M:%S"`,$zip_copy_path,File path does not exist" >>$log_path_flag/$send_runing_log

exit

fi

echo `date +"%Y-%m-%d%H:%M:%S"`,判断完成 >>$log_path_flag/$send_runing_log

function send_zip(){

#datedetails=`date +"%Y-%m-%d%H:%M:%S"`

lsnumber=`ls $zip_copy_path | greptxt |wc -l`

if [ "$lsnumber" =="0" ];then

echo "`date +"%Y-%m-%d%H:%M:%S"`,$zip_copy_path,NO any log_file exist">>$log_path_flag/$send_runing_log

return 1

fi

#循环扫描读取txt描述文件

for txt_file in `ls $zip_copy_path |grep txt`

do

  cat $zip_copy_path/$txt_file|while read txt_line

  do

#根据txt描述文件解析相应参数

  zip_source_save_file=`echo $txt_line |awk -F ‘,‘ ‘{print $3}‘ `

  zip_success_number=`echo $txt_line |awk -F ‘,‘ ‘{print $5}‘`

  zip_copy_save_file=`echo $txt_line |awk -F ‘,‘ ‘{print $6}‘`

  http_url_txt=`echo $txt_line |awk -F ‘,‘ ‘{print $8}‘`

  url=`echo $http_url_txt|awk -F ‘?‘ ‘{print $1}‘`

  base_dir=`echo $http_url_txt|awk -F ‘?‘ ‘{print $2}‘|awk -F ‘&‘‘{print $1}‘|awk -F ‘=‘ ‘{print $2}‘`

  date_path=`echo $http_url_txt |awk -F ‘=‘ ‘{print $3}‘|awk -F ‘&‘‘{print $1}‘`

  zip_name=`echo $http_url_txt|awk -F ‘&‘ ‘{print $3}‘|awk -F ‘=‘‘{print $2}‘`

  post_txt=$url?dir_path=$base_dir\&time_path=$date_path\&file_name=$zip_name

#根据参数发送

curltxt=`/usr/bin/curl -i -s -S -F"action=uploadfile"  -F"[email protected]$zip_copy_save_file" $post_txt 2>$curlerror_tmp_save/$curlerror`                      #记录curl命令执行情况

curlsedtxt=`echo $curltxt|seds#"

"##g` #对curl命令返回的文本进行处理

#获取发送情况生成日志

#datedetails=`date+"%Y-%m-%d %H:%M:%S"`

log_txt_tmp=`date +"%Y-%m-%d%H:%M:%S"`,$zip_copy_save_file,$zip_source_save_file,$zip_success_number,$post_txt,"curlsuccess"

if [ -n "$curlsedtxt"];then

   if [[ $curlsedtxt =~ "200" ]];then

       sed_tmp_txt=`echo $url|sed‘s#\/#\\\/#g‘`

       sed -i ‘/‘"$sed_tmp_txt"‘/d‘$zip_copy_path/$txt_file

       success_txt=`echo $curlsedtxt|awk -F‘keep-alive‘ ‘{print $2}‘|sed s#"[[:space:]]"## `

       echo $log_txt_tmp,200,$success_txt>>$log_path_flag/$success_log    

   else

   http_return_txt=`echo $curlsedtxt|sed s#".*HTTP/1.1"##|awk -F"Server" ‘{print $1}‘|sed s#[[:space:]]##`

   body_txt=${http_return_txt#* }

   code_txt=${http_return_txt%% *}

   echo $log_txt_tmp,$code_txt,$body_txt>>$log_path_flag/$success_log

   fi

else

   curl_txt=`cat $curlerror_tmp_save/$curlerror`

   log_txt_tmp=`date +"%Y-%m-%d%H:%M:%S"`,$zip_copy_save_file,$zip_copy_save_file,$zip_success_number,$post_txt,$curl_txt,-,-

   echo $log_txt_tmp >>$log_path_flag/$success_log

fi

done

#判断删除描述文件

if [ ! -s"$zip_copy_path/$txt_file" ];then

copy_txt_file=$zip_copy_path/$txt_file

copy_zip_file=`echo$copy_txt_file|sed s#txt#zip#`

rm -rf $zip_copy_path/$txt_file$copy_zip_file

fi

done

}

#循环扫描txt描述文件

echo `date +"%Y-%m-%d%H:%M:%S"`,进入循环扫描txt描述文件流程 >>$log_path_flag/$send_runing_log

while :

do

echo `date +"%Y-%m-%d%H:%M:%S"`,正在扫描发送zip文件>>$log_path_flag/$send_runing_log

send_zip

echo `date +"%Y-%m-%d%H:%M:%S"`,此次发送过程结束>>$log_path_flag/$send_runing_log

echo `date +"%Y-%m-%d%H:%M:%S"`,脚本正在睡眠5m......>>$log_path_flag/$send_runing_log

sleep 5m

echo `date +"%Y-%m-%d%H:%M:%S"`,脚本睡眠结束 >>$log_path_flag/$send_runing_log

done

配置文件

vim curl_post.json

{

    "send_runing_log":"send_runtime.log",

   "file_posting_path":"/home/zhangchuan/scripts/report_31_archive/data_save/post_31_report_archive",#待发送区域

   "post_audit_log":"send_audit.log", #发送的审计日志按天创建文件夹

   "curltmptxt_save":"curltmptxt"#初始化的时候的存储

   "comments":"这是一个后台循环分发的脚本" #脚本的注释

}

时间: 2024-10-13 05:41:43

shell脚本规范的相关文章

shell脚本规范格式

#!/bin/bash #Date   :写作时间 2016-11-22 15:04:12 ##date "+%Y-%m-%d %H:%M:%S" #Author      :作者 #Mail    :邮箱 [email protected] #Function   :脚本介绍 #Version     :版本 V1.1 #Update           :脚本修改更新时间 6.1.1      版本和运行参数: 1) 脚本开发前,在脚本的开头以注释形式标清脚本版本号 2) 为脚本添

shell脚本规范与变量运用

前言随着Linux系统在企业中应用的越来越多,服务器自动化管理也变得越来越重要.Linux服务器自动化维护工作中,除了计划任务的设置外,shell脚本的应用也是非常重要的一部分.什么是shell脚本Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的.但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令.shell脚本的应用场景:

Shell编程-12-Shell脚本规范及调试

目录 Shell脚本规范 Shell脚本调试 Shell脚本规范 ? ? 良好的代码规范不仅方便阅读,也利于维护和提升开发效率.因此建议大家在编写Shell脚本时养成良好的代码习惯.今天就和大家探讨一下在Shell脚本中的一些规范,详细如下所示: 1.在Shell脚本中,第一行指定脚本解释器,如下所示: #!/bin/bash 或 #!/bin/sh 2.在Shell脚本中填写代码作者.日期.版权等信息,便于协同开发 3.Shell脚本中的注释,尽量采用英文注释,避免中文注释,可避免本机或切换系

Shell脚本的书写规范与优秀的开发习惯

<--目录-->1)脚本模块名2)代码框架3)函数规范4)脚本存放规范5)补充规范19条6)优秀的开发习惯 [脚本模块名]1.常规Shell脚本使用统一后辍:.sh,例:wsyht.sh2.模块的启动和停止脚本统一命名为start_{模块名}.sh和sop_{模块名}.sh3.监控脚本可以*_mon.sh为后辍,控制脚本以*_ctl.sh为后辍4.模块(及其脚本和二进制程序)命名应该代表其特性和功能,不要使用个人名字缩写等形式命名5.模块中的脚本和二进制程序命名禁止和其它脚本和二进制程序重名

编写Shell脚本的最佳实践,规范二

需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : 无 # Function: mysqldump备份mysql # Create Date: 2016-08-27 缩进有规矩 编码要统一 在写脚本的时候尽量使用UTF-8编码 太长要分行 巧用heredocs 学会查路径 script_dir=$(cd $(dirname $0) && pw

编写Shell脚本的最佳实践,规范一

随着写的SHELL程序越来越多,发现自己每次写都有不同的习惯或者定义了不同的东西,变量名定义得不一样,整个程序缩进不统一,没有注释等问题,等我回过头看这些程序的时候发现很麻烦.所以写了个shell代码规范. 1.1 目的 定义Shell脚本命名和编码规范,统一管理Shell脚本,便于自己和别人查看,提高代码书写速度和美观,暂时只对自己进行约束,其它人只供参考. 1.2 开发工具 shell脚本是个文件,没有开发环境,FC4图形环境下,可用gedit.vi.vim.joe等,推荐使用vim因为这个

Shell脚本编程规范与变量

主要内容 Shell脚本编程规范 Shell脚本应用场景 Shell编程规范 管道与重定向 Shell脚本变量 自定义变量 特殊变量 Shell脚本概述 Shell脚本的概念 将要执行的命令按顺序保存到一个文本文件 给该文件可执行权限,便可运行 可结合各种Shell控制语句以完成更复杂的操作 Shell脚本应用场景 重复性操作 批量事务处理 自动化运维 服务运行状态监控 定时任务执行 编写第一个Shell脚本 1.编写脚本代码 使用vim文本编辑器,每行一条Linux命令, 按执行顺序依次编写:

shell脚本开发的6点基本规范和优秀习惯

1. 开头指定脚本解释器 #!/bin/sh 或 #!/bin/bash 2. 开头提供功能描述.作者以及版本等信息 #Description: #Author: #Contact: #Last edited: #Version: 注:可以修改/etc/vimrc或者~/.vimrc让以上信息在每次创建shell脚本时自动生成 3. 脚本中不用中文注释,容易出现乱码 4. 脚本以.sh为扩展名 5. 成对的内容一次写出来,避免遗漏,如: {}  []  ''  ``  ""  if和f

shell脚本之编程规范与变量

shell脚本概念 将要执行的命令按顺序保存到一个文本文件,给该文件一个可执行权限,便可运行. shell脚本的构成 1.脚本申明 脚本声明是指明用哪个解释器来解释 2.注释信息 注释信息是指明这个脚本的一些说明信息.就知道这个脚本时干什么用的了,这个信息不执行 3.可执行语句 进行执行的一些命令 执行shell脚本的方式 1.绝对路径 2.相对路径 3.sh 脚本路径 4.source 脚本路径 注意:其中,绝对路径与相对路径实行shell脚本时,该脚本文件必须要有可执行权限.Source脚本