字符串截取掉子字符串

Linux 的字符串截取很有用。有八种方法。
假设有变量 var= http://www.aaa.com/123.htm .

  1. # 号截取,删除左边字符,保留右边字符。
    echo ${var#*//}
    其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
    即删除 http://
    结果是 :www.aaa.com/123.htm

  2. ## 号截取,删除左边字符,保留右边字符。
    echo ${var##*/}
    其中 ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
    即删除 http://www.aaa.com/
    结果是 123.htm

  3. %号截取,删除右边字符,保留左边字符
    echo ${var%/*}
    %/* 表示从右边开始,删除第一个 / 号及右边的字符
    结果是: http://www.aaa.com

  4. %% 号截取,删除右边字符,保留左边字符
    echo ${var%%/*}
    %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
    结果是:http:

  5. 从左边第几个字符开始,及字符的个数
    echo ${var:0:5}
    其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
    结果是:http:

  6. 从左边第几个字符开始,一直到结束。
    echo ${var:7}
    其中的 7 表示左边第8个字符开始,一直到结束。
    结果是 :www.aaa.com/123.htm

  7. 从右边第几个字符开始,及字符的个数
    echo ${var:0-7:3}
    其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
    结果是:123

  8. 从右边第几个字符开始,一直到结束。
    echo ${var:0-7}
    表示从右边第七个字符开始,一直到结束。
    结果是:123.htm

删除某个目录下的文件

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

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

此功能用到了上面的所有代码
场景:日志目录下一天一个日志文件,日志文件以日期为后缀
例如: 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[@]}
  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
echo "`date +'%F %H:%M:%S'` 删除日志结束!"