Linux常用shell脚本
Posted 软件测试老鸟之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux常用shell脚本相关的知识,希望对你有一定的参考价值。
批量kill进程号
代码可以左右滑动查看全部哦
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
ps -ef| grep tomcat|awk '{print $2}'|xargs kill -9
查找所有的java进行,然后打印出来
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
跨目录拷贝
/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后面的路径不能为绝对路径,必须为相对路径才可以,否则出错。
一键启停服务(需要服务结构都一致)
代码可以左右滑动查看全部哦
#!/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 服务结束**********"
查找配置文件进行替换
代码可以左右滑动查看全部哦
#!/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
远程拷贝
将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判断文件和文件夹是否存在
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脚本的主要内容,如果未能解决你的问题,请参考以下文章