shell 脚本整理

    技术2024-01-08  99

    文章目录

    脚本仓库1. 如果前一条命令执行成功则...2. 如果不是root用户则...3. 用端口号来杀进程根据服务名来杀进程(普通服务直接pkill 就好 此方法适用于自建的服务)4. 简易服务监控脚本 每隔一段时间就检查服务是否运行 如果挂掉就给他重启6. 主机之间的免交互的互信脚本

    脚本仓库

    1. 如果前一条命令执行成功则…

    if [ $? -eq 0 ];then echo -e "successful" else echo "filed" fi

    2. 如果不是root用户则…

    判断用户是不是XXX id号是否为XX 不是则返回

    if [[ `whoami` = "root" && `id -u` -eq 0 ]];then echo "该用户为root" else echo -e "\e[1;31mERROR: 当前为非root用户登录,该服务需要以root权限运行!\e[0m" exit fi

    3. 用端口号来杀进程

    kill -9 $(ss -lntup |grep 9090|awk -F'=' '{print $2}' |awk -F',' '{print $1}')

    另一种零宽断言式

    零宽断言语法 grep -oP o: 只显示自己需要的内容 默认是显示一行 匹配到的部分是标红的 -P : 标识使用perl正则语言 (?=xxx) : 这个表示匹配xxx的左边内容 "?"开口向左就记住了 (?<=XXX) : 表示匹配右边的内容 <开口向右 (?<=pid=)[0-9]* 表示匹配pid= 右边的带数字的内容 *号代表出现一次或多次 实际情况pid的号码可能有重复也可能不重复 [0-9]表示匹配数字

    ss -lntup |grep 80 |grep -oP '(?<=pid=)[0-9]*'|xargs kill -9

    根据服务名来杀进程(普通服务直接pkill 就好 此方法适用于自建的服务)

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

    4. 简易服务监控脚本 每隔一段时间就检查服务是否运行 如果挂掉就给他重启

    写个while true 循环让他一直执行去吧 条件可以根据实际情况来 (当时监控jenkins原因是因为服务器资源紧张。 进行资源扩容要上报 审批下来需要两三天 开发需要测试 这也是逼不得已)

    #!/bin/bash #isexists=0 while [ "1" -eq "1" ] do cd /etc/init.d isexists=`ss -lntup | grep 8080 |wc -l ` if [ $isexists -eq "0" ]; then service jenkins restart fi sleep 30 done

    5.1 当然也可以逆向整活 每隔一段时间就监控某个服务 当他启动就给他关掉。 这种人建议离远一点,免得贱自己一身血哈哈

    #!/bin/bash #isexists=0 while [ "1" -eq "1" ] do cd /etc/init.d isexists=`ss -lntup | grep 8080 |wc -l ` if [ $isexists -eq "1" ]; then kill -9 $(ss -lntup |grep 8080|awk -F'=' '{print $2}' |awk -F',' '{print $1}') fi sleep 30 done

    用 nohup & 方式启动 喜欢瞎搞的可以把这两个脚本内容在自己的虚拟机上跑一跑

    6. 主机之间的免交互的互信脚本

    懒得找了 自己搜一下把网上一堆哦

    分享一个不设置sshkeygen的方法 可以看一下ssh服务的配置文件/etc/ssh/ssh_config 在第35行的位置可以看到每次连接默认的方式都是询问 相当于把当前主机作为跳板机

    sshpass -p'$passwd' ssh -o StrictHostKeyChecking=no '$user'@'$host'

    需要执行什么命令的话 可以在后面加上 && 如:

    sshpass -p'$passwd' ssh -o StrictHostKeyChecking=no '$user'@'$host' && ' cd /usr/bin/ && touch test' #### 7. 当你导入一堆docker镜像(一堆安装包) 懒得一个一个解压时 ```bash for i in $(ls);do docker load -i $i ;done ls *.tar.gz | xargs -n1 docker load -i -n1 #每行1个输出 -n2 #每行两个输出
    Processed: 0.009, SQL: 9