第九节 shell场景化编程

第九节 shell场景化编程

状态查询类脚本解析

1、进程状态查询,这是我们之前写的一个进程查询类的脚本,当然输出被格式化成自动化运维平台自动识别的格式了

#!/bin/bash

#通用的进程查看,提取了最关键的几个维度
#process_name='mysqld'

SEP="@"

checkprocess(){
    p_pids=`ps -aux |grep -v grep |grep $1|awk {'print $2'}`
    echo "HOSTNAME${SEP}COMMAND${SEP}STAT${SEP}USER${SEP}PID${SEP}CPU${SEP}MEM${SEP}INFO"
    if [ -z "$p_pids" ];then
      echo "no found process"
    else
        for p_pid in $p_pids;
        do
            p_command=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $11" "$12'}`
            p_stat=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $8'}`
            p_user=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $1'}`
            p_cpu=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $3'}`
            p_mem=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $4'}`
            # echo 'COMMAND,STAT,USER,PID,CPU,MEM,INFO'
            echo "$HOSTNAME${SEP}$p_command${SEP}$p_stat${SEP}$p_user${SEP}$p_pid${SEP}$p_cpu${SEP}$p_mem${SEP}found process $1"
        done

    fi
}
#checkprocess $process_name
checkprocess @option.process_name@

上面的脚本是我们随手写的,其实也有很多不科学的地方,大家看下下面,对比下上面的哪里不够科学

SEP="@"

checkprocess(){
    p_pids=`ps -aux |grep -v grep |grep $1|awk {'print $2'}`
    echo "COMMAND${SEP}STAT${SEP}USER${SEP}CPU${SEP}MEM${SEP}PID${SEP}HOSTNAME${SEP}INFO"
    if [ -z "$p_pids" ];then
        echo "No found process"
    else
        for p_pid in $p_pids;
        do
        a=`ps -axu |grep $1 |grep $p_pid`#这里如果不单独给变量,会被awk带来未知影响,要测试好
        echo $a |awk -v pid=$p_pid -v hostname=$HOSTNAME -v i="found telegraf" 'BEGIN{OFS="@"}{print $8,$1,$3,$4,pid,hostname,i}'
        done

    fi
}
#checkprocess $process_name
checkprocess telegraf
脚本需要和人来交互的
#!/bin/sh
read -p "pls input two num:" a b
if [ $a -lt $b ];then
    echo "yes,$a less than $b"
    exit
fi
if [ $a -eq $b ];then
    echo "yes,$a eaual than $b"
    exit
fi
if [ $a -gt $b ];then
    echo "yes,$a greater than $b"
    exit
fi
模拟交互登录类脚本解析

1.ssh实现自动登录并停在服务器上

#!/usr/bin/expect -f  
 set ip [lindex $argv 0 ]     //接收第一个参数,并设置IP  
 set password [lindex $argv 1 ]   //接收第二个参数,并设置密码  
 set timeout 10                   //设置超时时间  
 spawn ssh root@$ip       //发送ssh请求 
 expect {                 //返回信息匹配  
 "*yes/no" { send "yes\r"; exp_continue}  //第一次ssh连接会提示yes/no,继续  
 "*password:" { send "$password\r" }      //出现密码提示,发送密码  
 }  
 interact          //交互模式,用户会停留在远程服务器上面. 

2.ssh远程登录到服务器,并执行命令,执行完退出

#!/usr/bin/expect -f  
 set ip 192.168.1.130  
 set password admin  
 set timeout 10  
 spawn ssh root@$ip  
 expect {  
	 "*yes/no" { send "yes\r"; exp_continue}  
	 "*password:" { send "$password\r" }  
 }  
 expect "#*"  
 send "pwd\r"  
 send  "exit\r"  
 expect eof
更多的脚本

传送门

###shell脚本常见的使用场景:

1安装类型脚本

我们可以使用shell脚本进行软件的安装,文件的创建等等写部署类的工作

2测试类型的脚本

我们可以使用脚本测试网络,测试性能,收集各种信息等信息收集类型的工作

3自动化类脚本和插件脚本

很多工具都可以使用脚本来作为插件,比如ansbile,saltstack,rundeck等等。或者直接写脚本放在contrab里面周期性执行等,这也是使用脚本的一个方面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫慌搞安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值