Linux常用shell脚本

Posted 软件测试老鸟之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用shell脚本相关的知识,希望对你有一定的参考价值。


批量kill进程号

Linux常用shell脚本

代码可以左右滑动查看全部哦

eth='5668  5673  7733  7738  10512  10517  12453  12458  17134  17139  18075  18080  20340  20345  21120'

for name in $eth
do
 echo "Pid  is $name"
 echo "kill -9 $name"
 kill -9 $name
done


通过进程名kill

Linux常用shell脚本


ps -ef| grep tomcat|awk '{print $2}'|xargs kill -9


查找所有的java进行,然后打印出来

Linux常用shell脚本

pidlist=`ps -ef|grep java |grep -v "grep" |awk '{print $2}'`
if [ "$pidlist" = "" ]  
then  
 echo "no java process alive"  
else  
 for pid in ${pidlist}  
 {  
   echo "java process is: $pid:"  
 }    
fi


跨目录拷贝

Linux常用shell脚本


/home目录里面有data目录,data目录里面有a、b、c、d、e五个目录,现在要把data目录里面除过e目录之外的所有目录拷贝到/bak目录中

方法一:终端命令行下执行以下命令


cp -R `find /home/data -type d -path /home/data/e -prune -o -print | sed 1d ` /bak
########################################################
脚本实现
脚本存放路径/home/osyunwei.sh
vi /home/osyunwei.sh #编辑脚本,添加下面的代码
#!/bin/sh
cp -R `find /home/data -type d -path /home/data/e -prune -o -print | sed 1d ` /bak
chmod +x /home/osyunwei.sh #添加脚本执行权限
cd /home #进入脚本存放目录
./osyunwei.sh #执行脚本
########################################################


方法二:使用cp命令复制的时候,只能排除一个目录不被复制,如果想排除两个或者多个目录的话,就需要使用rsync命令来实现了,看下面的例子

如果要排除/home/data目录下面的a、b、c、三个目录,同时拷贝其它所有目录,执行以下命令

yum install rsync #安装rsync


rsync -av --exclude data/a --exclude data/b --exclude data/c data /bak


注意:--exclude后面的路径不能为绝对路径,必须为相对路径才可以,否则出错。


一键启停服务(需要服务结构都一致)

Linux常用shell脚本

代码可以左右滑动查看全部哦

#!/bin/sh

echo "一键启停10.39服务"
command=$1

if [ $# -ne 1 ]
then
   echo "usage: $0   stop|start"
   exit
fi

server_list="pluto-ps-server-new pluto-ps-support-server pluto-ps-company-new"
echo "**********$command 服务**********"
for name in $server_list
do
 echo "######$command  $name ######"
 server_name=/data/$name/bin/server.sh
 #echo "/bin/bash $server_name $command"
 /bin/bash $server_name $command
 
 echo "等待3秒"
 sleep 3
 process_number=`ps -ef  | grep /data/$name | grep -v 'grep'| wc -l`
 #echo "$name 进程数:$process_number"
 processId=`ps -ef | grep /data/$name |  grep -v 'grep' | awk '{ print $2 }'`  
 for ID in $processId
 do
   echo "processID:$ID"
 done
 
 if [ $process_number -eq 1  ];then
   echo "$name 服务已启动"
 elif [ $process_number -eq 0  ];then
               echo "$name 服务已停止"
       else
   echo "$name 已开启多个进程,请确认服务是否正常"
 fi
done
echo "**********$command 服务结束**********"


查找配置文件进行替换

Linux常用shell脚本

代码可以左右滑动查看全部哦

#!/bin/bash
if [ $# != 1 ] ; then
       echo "请输入文件路径  eg: 目标路径"
       exit 1;
fi
project=$1
Filepath=/data/$1/conf/env
WebPath=/data/$1/WEB-INF/classes

echo "配置文件目录:$Filepath"
remoting=remoting.properties


if [ -d "$WebPath" ];then
 cd $WebPath
 echo "替换目录:$WebPath"

 if [ -f  "$remoting" ]; then
         echo "替换$remoting文件的配置"
         find $Filepath -name $remoting | xargs sed -ri 's/rabbit.address=([0-9]{1,3}\.){3}[0-9]{1,3}/rabbit.address=192.168.10.59/g'
         find $Filepath -name $remoting | xargs sed -i 's/rabbit.username=.*/rabbit.username=it/g'
         find $Filepath -name $remoting | xargs sed -i 's/rabbit.password=.*/rabbit.password=its123/g'
         find $Filepath -name $remoting | xargs sed -i 's/virtualhost=.*/virtualhost=\//g'
         find $Filepath -name $remoting | xargs sed -i 's/virtual=.*/virtual=\//g'
       
         #文件服务器
         find $Filepath -name $remoting | xargs sed -ri 's/server=([0-9]{1,3}\.){3}[0-9]{1,3}/server=192.168.10.59/g'
         find $Filepath -name $remoting | xargs sed -i 's/user=.*/user=it/g'
         find $Filepath -name $remoting | xargs sed -i 's/password=.*/password=its123/g'
 fi
fi


远程拷贝

Linux常用shell脚本

将192.168.10.55机器上面/data/pluto-is/lib下面的文件拷贝到本地/data/pluto-is/lib下面


scp root@192.168.10.55:/data/pluto-is/lib/*  /data/pluto-is/lib/


Linux shell判断文件和文件夹是否存在

Linux常用shell脚本

myPath="/var/log/httpd/"  
myFile="/var /log/httpd/access.log"  

#这里的-d 参数判断$myPath是否存在  
if [ ! -d "$myPath"]; then  
  mkdir "$myPath"  
fi  
 
#这里的-f参数判断$myFile是否存在  
if [ ! -f "$myFile" ]; then  
  touch "$myFile"  
fi


通过端口查看应用程序(例如:查找6028端口)


ps -ef  | grep  `netstat -anpl | grep 6028 | awk NR==1'{ print $7 }'  | grep -o "[0-9]*[0-9]" `


小结:

日常工作中不可避免会接触Linux,熟悉一些基本的Linux命令是基本功。其实Linux没有那么难,多实验几次就学会了。掌握一些常用的shell脚本也会大大提高工作效率,一些整天需要重复的操作可以写写脚本,偷偷懒~~





  欢迎扫描关注~

点击这里给我好看哦

以上是关于Linux常用shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

Linux下常用的shell脚本整理

Linux常用shell脚本

代码片段:Shell脚本实现重复执行和多进程

Linux常用Shell脚本

Linux下如何执行Shell脚本

Linux常用的系统监控shell脚本