Shell脚本常用方法积累(根据端口号或进程名终止进程、询问、计算日期、遍历文件夹、提取文件名、比较日期等)

目录

1.根据端口号去终止进程

2.根据应用名去终止进程

3.询问确认

4.根据时间删除文件(如删除七天前的日志)

5.计算某一天的前几天的日期

 6.

提取文件名、提取不带后缀名的文件名、比较日期大小、截取字符串、echo直接输出信息到文本

7.遍历文件夹


1.根据端口号去终止进程

#根据端口号去终止进程(0表执行成功)
#$1:端口号
killProcessByPort()
{
	lsof -i:$1 |grep LISTEN | awk '{printf $2}' | xargs kill -9
    porttest=`netstat -ntl | grep $1 | grep LISTEN | wc -l`
	if [ $porttest -ge 1 ]
	then
		return 1
	fi
	return 0
}

查看端口号被那个进程占用:

(1)lsof -i:端口号

(2)netstat -tunlp|grep 端口号

 

2.根据应用名去终止进程

#$1:进程名
killProcessByName()
{
	ps -ef|grep $1 |grep -v grep|awk '{print $2}' |xargs kill -9
	processtest=`ps -ef | grep $1 | wc -l`
	if [ $processtest -ge 2 ]
	then
		return 1
	fi
	return 0
}

3.询问确认

while [ 1 ]
		do
			read -r -p "该进程已启动,是否需要重新启动(Y/N)?"  myConfirm
			case $myConfirm in 
			[Yy]|[Yy][Ee][Ss])
				stopProcess $1 $2 $3 $4
				if [ $? -ne 0 ]
				then
					return 1
				fi
				echo "正在重启..."
				startProcess $1 $5 $6
				if [ $? -ne 0 ]
				then
					return 1
				fi
				return 1
				;;
			[Nn]|[Nn][Oo])
				echo "未重启"
				return 1
				;;
			*)
				clear
				echo "非法输入,请重新输入!"
				continue 
				;;
			esac	
		done

4.根据时间删除文件(如删除七天前的日志)

find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;

atime:访问时间(access time),指的是文件最后被读取的时间,可以使用touch命令更改为当前时间;
ctime:变更时间(change time),指的是文件本身最后被变更的时间,变更动作可以使chmod、chgrp、mv等等;
mtime:修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等等;
 

find /opt/soft/log/ -mtime +7 -name "*.log" -exec rm -rf {} \;

5.计算某一天的前几天的日期

beforeDate()
{
  strdate=$1
  days=$2
  yy=`echo $strdate|cut -c 1-4`
  mm=`echo $strdate|cut -c 5-6`
  dd=`echo $strdate|cut -c 7-8`
  sav_dd=$days/home/openuser/soa-tomcat/logs
  days=`expr $days - $dd`
  while [ $days -ge 0 ]
  do
    mm=`expr $mm - 1`
    [ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`
    tmpa=`cal $mm $yy`
    tmpb=`echo $tmpa|awk '{print $NF}'`
    days=`expr $days - $tmpb`
  done
  dd=`expr 0 - $days`
  expr $dd : "^.$" > /dev/null && dd=0$dd
  expr $mm : "^.$" > /dev/null && mm=0$mm
  echo $yy-$mm-$dd
}

 6.

提取文件名、提取不带后缀名的文件名、比较日期大小、截取字符串、echo直接输出信息到文本

#输出到操作日志中
#$1:相关提示信息
outputOperateLog()
{
  echo $1 >>$BACKLOGPATH/$OPERATELOGFILENAME
  echo -e >>$BACKLOGPATH/$OPERATELOGFILENAME
}


traversingDirAndDelLog()
{
  #从日志所在文件路径提取出日志的直接父级文件夹
  logDirName=${1##*/}
  cd $1
  cd ../
  #遍历日志文件
  for file in $logDirName/*
  do
    if  test -f $file 
    #if test -f $file 
    then
      #提取出文件名
      fileName=${file##*/}
      #提取不带后缀名的文件名
      fileNameRmSuffix=${fileName%.*}
      #截取出文件名中的日期
      fileNameDate=${fileNameRmSuffix: $2: $3}
      #判断日期大小进行删除
      #先将日期转化为时间戳,然后再进行比较
      fileDate=$(date -d "$fileNameDate" +%s)
      delDate=$(date -d "$DELWORKDATE" +%s)
      if [ $fileDate -le $delDate ]
      then
        rm -rf $1/$fileName
        if [ $? -ne 0 ]
        then
         outputOperateLog "$1/$fileName删除失败"`date  +%Y-%m-%d,%H:%M:%S`
        else
          outputOperateLog "$1/$fileName删除成功"`date  +%Y-%m-%d,%H:%M:%S`
        fi
      fi
    fi
 done
}

7.遍历文件夹

#$1:文件全路径
recursiveDir()
{
 for element in `ls -Sr $1`
 do 
   dir_or_file=$1"/"$element
   if test -d $dir_or_file 
   then
    #截取文件夹名
    tempFolderName=${dir_or_file##*/}
    echo "文件夹名:$tempFolderName"
    RecursiveDelLog $dir_or_file
   else
    #处理该文件
    return
 done
 return
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值