您的位置:首页 > 运维架构 > Shell

shell字符串转日期,日期转字符串,判断字符串包含某个字符串,删除某个目录下的几天前的日志文件

2017-12-27 19:04 393 查看

字符串与日期互转

# 日期转字符串
date +%F  #输出格式 YYYY-MM-DD
date +'%F %H:%m:%S' #输出格式 YYYY-MM-DD HH:mm:ss

# 字符串转日期
date -d '2016-12-27'
date -d '2016-12-27' +%s #转成时间戳


判断字符串包含某个字符串

test1="aaabbbb"
test2="a"
if [[ $test1 == *$test2* ]]; then
echo "${test1} 包含 ${test2}"
fi


字符串截取掉子字符串

Linux 的字符串截取很有用。有八种方法。

假设有变量 var=http://www.aaa.com/123.htm.

# 号截取,删除左边字符,保留右边字符。

echo ${var#*//}

其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符

即删除 http://
结果是 :www.aaa.com/123.htm

## 号截取,删除左边字符,保留右边字符。

echo ${var##*/}

其中 ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符

即删除 http://www.aaa.com/

结果是 123.htm

%号截取,删除右边字符,保留左边字符

echo ${var%/*}

%/* 表示从右边开始,删除第一个 / 号及右边的字符

结果是:http://www.aaa.com

%% 号截取,删除右边字符,保留左边字符

echo ${var%%/*}

%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符

结果是:http:

从左边第几个字符开始,及字符的个数

echo ${var:0:5}

其中的 0 表示左边第一个字符开始,5 表示字符的总个数。

结果是:http:

从左边第几个字符开始,一直到结束。

echo ${var:7}

其中的 7 表示左边第8个字符开始,一直到结束。

结果是 :ww
4000
w.aaa.com/123.htm

从右边第几个字符开始,及字符的个数

echo ${var:0-7:3}

其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。

结果是:123

从右边第几个字符开始,一直到结束。

echo ${var:0-7}

表示从右边第七个字符开始,一直到结束。

结果是:123.htm

删除某个目录下的文件

fileDir=/test/
# 获取目录下所有的文件名称
tempFileName=`ls $fileDir`
# 将上面这个变量转换为数组,进行遍历
fileNames=($(echo $tempFileName))
for fileName in ${fileNames[@]}
do
echo "`date +'%F %H:%M:%S'` rm file $fileName"
rm $fileDir$fileName
done


删除日志目录的下几天之前的日志文件

此功能用到了上面的所有代码

场景:日志目录下一天一个日志文件,日志文件以日期为后缀

例如: test.log(当天的日志文件),test.log.2017-12-24(历史的日志文件)

代码如下:

#!/bin/bash
#########################
#
#删除test目录下的日志
#
########################

# 删除几天前的日志
delete_days=2

# 要删除的日志文件目录
fileDir=/test/

# 要删除的日志文件名前缀
fileNamePre=test.log.

# 获取目录下所有的文件名称
tempFileName=`ls $fileDir`

# 将上面这个变量转换为数组,进行遍历
fileNames=($(echo $tempFileName))

# 当天日期
today=`date +%F`
#echo $today
# 当天零点时间戳
todayTime=`date -d "$today" +%s`
#echo $todayTime

echo "`date +'%F %H:%M:%S'` 删除目录${fileDir}下${delete_days}天前日志!"

# 遍历数组,找到2天前的文件删掉
for fileName in ${fileNames[@]}
do
if [[ $fileName == $fileNamePre* ]]; then
# 文件名的后缀日期
fileDay=${fileName#*$fileNamePre}

# 转换为时间戳
fileDayTime=`date -d "$fileDay" +%s`
#echo $fileDayTime

# 文件日期与当天的时间差,秒级
dayTime=$[todayTime-fileDayTime]
#echo $dayTime

# 判断文件是否要删除
if [[ $dayTime -gt $[delete_days*24*60*60] ]]; then
echo "`date +'%F %H:%M:%S'` rm file $fileName"
rm $fileDir$fileName
fi

fi

done

echo "`date +'%F %H:%M:%S'` 删除日志结束!"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell