Shell实用案例

这里主要记录一下工作中遇到的一些常用shell

1.jenkins部署远程tomcat

#/bin/bash
export TOMCAT_HOME_PATH=/usr/local/soft/tomcat-8.5.53
cd $TOMCAT_HOME_PATH
#停服;
pid=`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`
`kill -9 $pid`
#备份war包
date_now=`date '+%Y%m%d%H%M%S'`
`cp ./webapps/demo-0.0.1-SNAPSHOT.jar ./webapps_back/demo-0.0.1-SNAPSHOT.jar_$date_now`
`cp /usr/local/package/demo-0.0.1-SNAPSHOT.jar ./webapps/`
./bin/startup.sh
echo "tomcat start success"

2.向集群节点发送文件

#!/bin/bash
#this is shell local system hadoop send it hadoop system
#if input arguments is not empty
if [ $# -le 0 ]
then
        echo "you input arguments is empty"
        exit 1;
fi
#get filename and dirname
filename=`basename $1`
dirname=`cd -P $(dirname $1);pwd`
user=`whoami`

for(( host=1;host<=5;host++ ))
do
        echo "---------------- hadoop$host begin  ----------------"
        sync -lrv  "${dirname}/${filename} ${user}@hadoop${host}:${dirname}"
        #sync -lrv /tmp/a.txt root@hadoop2:/tmp
        echo "---------------- hadoop$host end -------------------"     
done

3.批量执行命令

#!/bin/bash
if [ $# -le 0 ]
then
	echo "you input arguments is empty"
	exit 1;
fi	
for(( host=1;host<=5;host++ ))
do
	echo "---------------- hadoop$host begin  ----------------"
	ssh "hadoop${host} $@"
	echo "---------------- hadoop$host end -------------------"	
done

4.查询系统中最耗性能的服务

查看CPU利用率与负载 top;
查看内存利用率free;
查看CPU与内存占用最高的10个进程top、ps

#!/bin/bash
echo "=======cpu使用情况=========="
ps -eo pid,pcpu,pmem,args --sort=-pcpu | head -n 10
echo "=======内存使用情况=========="
ps -eo pid,pcpu,pmem,args --sort=-pmem | head -n 10

参数说明:
-A所有的进程均显示出来,与 -e 具有同样的效用;
-o 是用户自定义输出格式
–sort=WORD 按照WORD 指定的格式排序,[±]是指升序还是降序排序

5.脚本交互输入参数

比如我们有这样一个脚本demo.sh,需要输入用户名和年龄:

#! /bin/bash
read -p "please enter name:" name
read -p "please enter age:" age
echo 用户名:$name,年龄:$age

第一种方法:
新建一个文本,里面包含有name与age的值:
cat data.txt
rose 18

sh demo.sh < data.txt

第二种方法:
利用管道,让前个命令的输出作为后个命令的输入:

echo -e "rose\n18\n" | sh test.sh 

第三种方法:
利用expect完成交互自动化,它是一个工具,如果没有此命令需要安装一下:
yum install expect.x86_64
安装完成之后,编程如下脚本:vim expect_demo.sh

#! /usr/bin/expect
spawn sh demo.sh
expect "please enter name:"
send "tom\n"
expect "please enter age:"
send "18\n"
expect off

运行命令可用:

expect expect_demo.sh

解释:
/usr/bin/expect:这个是选用解释器的意思
spawn: 指定需要将哪个命令自动化
expect:需要等待的消息
send:是要发送的命令
expect off:指明命令交互结束

6.查看服务利用率

查看CPU、内存、硬件、网络利用率;

#!/bin/bash
function cpu(){
        util=$(vmstat | awk '{if(NR==3)print $13+$14}')
        iowait=$(vmstat | awk '{if(NR==3)print $16}')
        echo "====================CPU===================="
        echo "CPU使用率:${util}%"
        echo "等待磁盘IO使用率:${iowait}%"
}
function memory(){
        total=$(free -m | awk '{if(NR==2)printf "%.1f", $2/1024}')
        used=$(free -m | awk '{if(NR==2)printf "%.1f",($2-$NF)/1024}')
        valiable=$(free -m | awk '{if(NR==2)printf "%.1f",$NF/1024}')
        echo "====================内存==================="
        echo "总内存:${total}G"
        echo "已使用:${used}G"
        echo "可用内存:${valiable}G"
}
function disk(){
        fs=$(df -h | awk '/^\/dev/{print $1}')
        echo "====================磁盘==================="
        for p in $fs; do
                mounted=$(df -h | awk -v p=$p '$1==p{print $NF}')
                size=$(df -h | awk -v p=$p '$1==p{print $2}')
                used=$(df -h | awk -v p=$p '$1==p{print $3}')
                used_percent=$(df -h | awk -v p=$p '$1==p{print $5}')
                echo "挂载点:$mounted  总大小:$size   已用:$used     使用率:$used_percent"
        done
}
function tcp(){
        summery=$(netstat -antp | awk '{a[$6]++}END{for(i in a)printf i":"a[i]"    "}')
        echo "====================TCP==================="
        echo "$summery"
}
cpu
memory
disk
tcp
echo ""

输出结果:

7.发送告警邮件

1.安装邮件 yum install mailx -y
2.配置发件人 vim /etc/mail.rc

添加如下配置:

set from=sxl1362@163.com smtp=smtp.163.com
set smtp-auth-user=sxl1362@163.com smtp-auth-password=77665
set smtp-auth=login

测试 :
echo “邮件内容” | mail -s ‘title’ 1362366259@qq.com
如果出现smtp-server: 550 User has no permission错误 ,需要sxl1362@163.com开启pop3/smtp服务;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值