字符串与日期互转
# 日期转字符串
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个字符开始,一直到结束。
结果是 :www.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'` 删除日志结束!"