shell 编程实例之shell 常规用法及shell 函数

一、shell 常规用法

1.获取当前脚本执行目录

   SCRIPT_DIR="$(cd "$( dirname "$0")" && pwd)"

2.字符串切分,获得当前目录的父级目录

 ESEN_PETA=${ SCRIPT_DIR%/*}

3.更改默认换行符,实现将字符串变成数组

IFS_BLANK=$IFS
IFS="  ,"

在脚本最后执行IFS=$IFS_BLANK

4.关联数组,类似map

声明:declare -A  IPHOST

使用: IPHOST[$host]=$ip

5.更改echo 显示效果
iecho()
{
  echo -e  "\033[0;32;1m[INFO] $@ \033[0m"
}

6.rpm 相关用法

rpm -qa | grep 包名     检查依赖包

rpm -e --nodeps --allmatches 删除所有同名包并忽略依赖

 rpm -Uvh --replacefiles --force 

二、本实例主要实现了远程拉取日志,主要通过编写小时拉取日志函数,实现按小时拉取和按天拉取

#!/bin/bash
#shell 中需要的配置文件的目录
source $DIR/../conf/shell_env.conf
#  ${#WORKROOT}获得WORKROOT字符串长度
if [ ${#WORKROOT} -lt 6 ]; then
    exit 1
fi
# $# 获得参数个数 
if [ $# -ne 3 ];then
    exit 1
fi

day=$1
hour=$2
get_log_by_hour=$3
log_name=""

#1.建立日志目录
mkdir -p ${WORKROOT}/log/${day}

#2.根据参数设置
#2-1.按照小时参数
if [ "${get_log_by_hour}" -eq "1" ]; then
    #转换时间格式变成2015_01_02
    log_name=`date -d ${day} +%y_%m_%d`
    log_name=${log_name}_${hour}
#2-2.按照天参数
elif [ "${get_log_by_hour}" -eq "0" ]; then
    log_name=`date -d ${day} +%y_%m_%d`
fi

#3.判断WORKROOT节点日志文件是否存在,存在则删除,防止数据重复
if [ -f ${WORKROOT}/log/${day}/${log_name}.log ];then
	rm -rf ${WORKROOT}/log/${day}/${log_name}.log
fi

#4.按照小时拉取日志function
function getLogsByHour()
{
	log_name_hour=$1
	#1.判断WORKROOT节点一个小时的请求日志文件是否存在,存在则删除,防止数据重复
	if [ -f ${WORKROOT}/log/${day}/${log_name_hour} ];then
		rm -rf ${WORKROOT}/log/${day}/${log_name_hour}
	fi
	#1.拉取所有节点的请求日志 (每小时)
	REQUEST_LOG_HOST=${REQUEST_LOG_HOST//,/ }    #这里是将REQUEST_LOG_HOST中的,替换为空格  
	for req_host in $REQUEST_LOG_HOST
	do
		scp work@${req_host}:${REQUEST_LOG_ROOT}/${log_name_hour}* ${WORKROOT}/log/${day}/${log_name_hour}_bak
		if [ -f ${WORKROOT}/log/${day}/${log_name_hour}_bak ];then
			cat ${WORKROOT}/log/${day}/${log_name_hour}_bak >>  ${WORKROOT}/log/${day}/${log_name_hour}
			rm -rf ${WORKROOT}/log/${day}/${log_name_hour}_bak
			echo "scp log success ${req_host} ${log_name_hour}"
		fi			
	done
}

#5.拉取日志
#5-1.按照小时拉取日志
if [ "${get_log_by_hour}" -eq "1" ]; then
	getLogsByHour ${log_name}.log
elif [ "${get_log_by_hour}" -eq "0" ]; then
#5-2.按照天拉取日志
	#拉取所有节点的请求日志(每天)
    for ((i=0; i<=${hour}; i++))
	do
	  j=${i}
	  if ((i<10))
	  then
	    j="0"${i}
	  fi
	  getLogsByHour ${log_name}_${j}.log
	    #合并所有节点的请求日志(每天)
		if [ -f ${WORKROOT}/log/${day}/${log_name}_${j}.log ]; then
			cat ${WORKROOT}/log/${day}/${log_name}_${j}.log >> ${WORKROOT}/log/${day}/${log_name}.log
			rm -rf ${WORKROOT}/log/${day}/${log_name}_${j}.log
			echo "merge log success ${log_name}_${j}.log to ${log_name}.log"
		fi
	done
fi

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值