文章目录
脚本仓库
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 #每行两个输出