首页 > 系统相关 >相关业务SHELL脚本

相关业务SHELL脚本

时间:2023-12-27 17:22:42浏览次数:38  
标签:脚本 SHELL mongo 业务 awk file print data day

SHELL脚本:

基于shell实现不同服务器root密码的统一

遇到的问题:

发现旧密码如果含有一些特殊符号,如"}","{"等,使用expect的话就会出现问题。

#!/bin/bash
#多个服务器修改密码的脚本
file=./10-bt.txt
new_passwd='12\}2231321'
while read ip passwd
do
echo $passwd
       expect<<-EOF 
       spawn ssh $ip
       expect {
              "(yes/no)?" {send "yes\r";exp_continue}
              "password:" {send "$passwd\r";}
       }
       expect "#" {send "echo $new_passwd | passwd --stdin root\r "}
       expect "#" {send "exit\r"}
       expect eof
EOF
done<$file
存在问题:旧密码如果含有一些特殊符号,如"}","{"等,该脚本就会出现问题

[root@ecs-shell shell]# cat 10-bt.txt 
192.168.1.185 123456
192.168.1.224 123456
#优化
#!/bin/bash
#这里的密码如果有特殊符号,需要转义。
new_passwd="\(\)123123"
#定义ip数组
declare -a ip_array
#定义passwd数组
declare -a passwd_array
while read ip passwd
do
ip_array+=("$ip")
passwd_array+=("$passwd")
done<passwd.txt
#获取ip和密码的总数
sum=$(cat passwd.txt | wc -l)
let sum=sum-1
for i in $(seq 0 1 $sum)
do
echo "${ip_array[i]}"
sshpass -p ${passwd_array[$i]} ssh root@${ip_array[$i]} "echo -n $new_passwd | passwd --stdin root" -o StrictHostChecking=no
done


基于shell实现元宝消耗或者获得的总数

#!/bin/bash
id=131072022
date_log=*11-0[6-9]*
fri_date=2023-11-09
file="./yuanbaoxiaohao.txt"
cat $date_log | grep $id | grep gold | grep -v "$fri_date 2[2-3]:"  | grep "|[0-9]\{4\}$" | awk -F"|" '{print $12-$13 }' > $file

# 设置初始总和为0
sum=0
# 逐行读取文档,将每行的数相加
while read line
do
  sum=$((sum + line))
done < $file  # 替换成你的输入文件名
# 打印总和
echo "总和为: $sum"

基于shell查询各个渠道服上的node进程状态

注意点:当执行时间过长时,我们需要去nohup sh test_node.sh & 将其挂在后台执行

#!/bin/bash
while read ip 
do
expect <<-EOF 
spawn ssh $ip
expect  { 
	"$" {
        send "ps -ef | grep node | wc -l\r"
	send "exit\r"
}
}
expect eof
EOF
done < ip.txt

#!/bin/bash
file=/data/script/ip.txt
#定义ip数组
declare -a ip_array
#定义游戏服区号数组
declare -a server_id_array
while read server_id ip
do
ip_array+=("$ip")
server_id_array+=("$server_id")
done<$file
#获取ip和区号的总数
sum=$(cat $file | wc -l)
let sum=sum-1
for i in $(seq 0 1 $sum)
do
echo "游戏服${server_id_array[i]}的node状态为"
ssh  sgsm@${ip_array[i]} "ps -ef | grep node  "    
done

基于shell实现磁盘的清理(删除到只剩磁盘空间剩余70%,mongo备份文件的清理)

#!/bin/bash
time=$(date +%H:%m:%S)

limit_disk=70
#获取当前磁盘利用率(若有/data/backups/mongo,则获取/data/backups/mongo利用率,否则获取/目录的利用率)
df -h | grep -w "/data/backups/mongo"
if [ $? -eq 0 ]; then
disk=$(df -h | grep /data/backups/mongo | awk -F" " '{print $5}' | awk -F "%" '{print $1}')  
else
disk=$(df -h | grep -w "/" | awk -F" " '{print $5}' | awk -F "%" '{print $1}')
fi
echo "当前磁盘空间为$disk"
#存放要删除文件的文件夹
deletefile=/data/script/testdir/deletefile.txt
#deletefile=/data/script/testdir/
#存放mongo备份的目录
mongodir=/data/backups/mongo/

[ ! -d $deletefile ]&&mkdir $deletefile

#获取当前/data/backups/mongo的最早的文件产生日期
old_file_time=$( ls -lt /data/backups/mongo | awk -F" " '{print $NF}' | tail -1 | awk -F"-"  'BEGIN { OFS="-" } {print $3,$4,$5}')
#将这个时间转化为时间戳
old_file_timestamp=$(date -d "$old_file_time" +%s)
#获取现在的时间戳
now_timestamp=$(date +%s)
#获取两个时间戳相差的天数
day_diff=$(( ($now_timestamp - $old_file_timestamp) / 86400 ))
echo "当前最早的备份是$day_diff天前的备份"
let day_diff=day_diff-1

#循环删除
while [ $disk -gt $limit_disk ]&&[ $day_diff -gt 3 ]
do
find $mongodir -ctime +$day_diff > $deletefile#/file$day_diff
while read file
do
rm $file 
done < /data/script/deletefile.txt
let day_diff=day_diff-1
done

基于shell向局域网其他主机推送普通用户公钥

#!/bin/bash
user=jerry
pub_key=/home/$user/.ssh/id_rsa.pub
key=/home/$user/.ssh/id_rsa
[ -f $key ]&&rm $key
[ -f $pub_key ]&&rm $pub_key
#非交互式生成密钥对
ssh-keygen -P '' -f ~/.ssh/id_rsa
#从文件中拿取ip,密码
while read ip passwd
do
echo $ip
echo $passwd 
expect<<-EOF
                spawn ssh-copy-id $user@$ip
                expect {
                        "yes/no" { send "yes\r";exp_continue }
                        "password:" { send "$passwd\r" }
                }  
expect eof   
EOF
done<11-bt.txt

cat 11-bt.txt
192.168.1.185 jhhjhg
192.168.1.224 jhhjhg

基于shell实现磁盘清理(删除某个以时间命名文件夹)只能去处理以日期格式命名的文件夹

#!/bin/bash
delete_dir=/data/backups/mongo
day=6
if [ $? -eq 0 ]; then
disk=$(df -h | grep /data/backups/mongo | awk -F" " '{print $5}' | awk -F "%" '{print $1}')  #获取当前占用磁盘空间大小
else
disk=$(df -h | grep -w "/" | awk -F" " '{print $5}' | awk -F "%" '{print $1}')
fi 
if [ $disk -gt 70 ];
then
       find $delete_dir -type d | grep $(echo $(date -d "$day days ago " +%Y-%m-%d )) |  xargs  rm -r >> /dev/null
fi

标签:脚本,SHELL,mongo,业务,awk,file,print,data,day
From: https://www.cnblogs.com/rallina/p/17930993.html

相关文章

  • nginx切割日志部署脚本编写
    #!/bin/bash#utf-8#description:部署nginx_lograte.sh脚本#---------------------------------------------------------------------script_name="logrotate_new.sh"script_download_directory="http://172.20.147.61/CentOS/app/script/hby"#......
  • Windows Server 2019-Powershell之客户端加域
    将本地计算机添加到域或工作组,可通过Add-Computer命令操作,具体信息如下:语法:Add-Computer[-DomainName][-ComputerName<String[]>][-Confirm]-Credential[-Force][-LocalCredential][-NewName][-OUPath][-Options{AccountCreate|Win9XUpgrade|UnsecuredJoi......
  • 2023年度业务风险报告:四个新风险趋势
    顶象防御云业务安全情报中心“2023年业务风险数据”统计显示,恶意爬虫风险最多,占总数的37.8%;其次是虚假账号注册,占18.79%;排名第三的是薅羊毛,占11.28%;人脸识别风险、人脸伪造风险逐步崭露头角,也达到1.45%;此外,其他类型风险(骗贷、套现、账号盗用、山寨App)占比30.67%。  其他类......
  • 用DevExpress WPF Windows 10 UI组件,轻松构建触摸优先的业务型应用UX(上)
    DevExpressWPF的Windows10UI组件包含了一系列应用导航组件、Toast通知、对话框组件等,能帮助用户轻松开发漂亮的业务型应用程序,并模仿触摸优先的Windows10ProUX。P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress......
  • MagicArray:像php一样,让Go业务代码不再卷!
    卷!一个字形容了当今码农行业的现状。一层一层的代码结构,一个一个dto,entity,vo,req,resp。这些对象越来越多,让码农们非常劳于奔命,加一个字段,改一个字段,影响面有多少。代码量也越来越大。有可能一个代码,要建10多个数据对象。这虽然有点夸张,但体现了行业的乱象。我是曾经写php代码的......
  • openjdk源码-java是如何执行shell命令的
    一般我们在java中调用shell脚本的方式如下publicintexecuteLinuxCmd(Stringcmd){LOGGER.info("cmd:{}",cmd);Runtimerun=Runtime.getRuntime();try{Processprocess=run.exec(cmd);InputStreamin=proce......
  • springboot自动部署脚本
    #!/bin/sh##javaenvexportJAVA_HOME=/usr/local/jdk/jdk1.8.0_101exportJRE_HOME=$JAVA_HOME/jreAPI_NAME=apiJAR_NAME=$API_NAME\.jar#PID代表是PID文件PID=$API_NAME\.pid#使用说明,用来提示输入参数usage(){echo"Usage:sh执行脚本.sh[start|stop|re......
  • 无涯教程-Java9 - JShell(REPL)
    REPL代表"Read-Eval-PrintLoop"。使用JShell,java具有REPL函数。使用REPL,无涯教程可以对基于Java的逻辑进行编码和测试,而无需使用javac进行编译,并且可以直接查看计算输出。运行JShell打开命令提示符,然后键入jshell。$jshell|WelcometoJShell--Version9-ea|Forani......
  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的
    在前面随笔《在Winform应用中增加通用的业务编码规则生成》,我介绍了基于Winform和WPF的一个通用的业务编码规则的管理功能,本篇随笔介绍基于后端WebAPI接口,实现快速的Vue3+ElementPlus前端界面的开发整合,同样是基于代码生成工具实现快速的前端代码的生成处理。1、通用的业务编码规......
  • JS逆向快速定位关键点之通用hook脚本
    大部分网站都会对关键参数进行加密,JS逆向时,我们首要任务是定位参数具体的加密逻辑。常见方式包含:关键字搜索、堆栈调试、XHR及事件监听、AST内存漫游、JSHook注入等本篇文章以JSHook注入为切入点,在做JS逆向往往需要定位到一些关键参数位置去分析,比如Cookie、Sign、Toke......