常用Shell脚本整理

分享一些shell,持续更新ing~
(有工作中用到的,有面试问到的,小伙伴们可以收藏一下。)

一.(打印99乘法表。)

#!/bin/bash
for i in `seq 9`
do
    for j in `seq 9`
        do
        [ $j -le $i ] && echo -n "$i x $j = `echo $(($i*$j))`  "  
    done
echo ""
done

二.(1到某个数字相加的值。)

#!/bin/bash
 
read -p "请输入一个数字" nub

sum=0; 
for ((i=0;i<=$nub;i++))
do 
  sum=`expr $sum + $i`
done 
echo $sum

三.一对兔子一年内(12个月)能繁殖成多少对?

#!/bin/bash
#有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。
#已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。
#假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?
#兔子的规律为数列,1,1,2,3,5,8,13,21)

f1=1  #第一个月
f2=1  #第二个月
sum=0 #一年洪一共有多少
for ((i=3;i<=12;i++)) #第一次生小兔子是在3月份
do 
sum=$[ $f1+$f2 ]
f1=$f2
f2=$sum
done 
echo "一对兔子一年内可以繁殖$sum只兔子"

四.猜数字小游戏

#!/bin/sh
 echo " 猜数字游戏开始啦~"
 read -p "请输入您的姓名: " name 
 biggest=1000              # 可能出现的最大数字
 guess=0                # 你的猜测值
 guesses=0               # 猜测的次数
 number=$(($$ % $biggest))       # 随机数字。介于1和$biggest之间
 
 while [ $guess -ne $number ] 
 do
  echo -n "你猜? " ; read guess
  if [ "$guess" -lt $number ] ; then
   echo "... 太小了!"
  elif [ "$guess" -gt $number ] ; then
   echo "... 太大了"
  fi
  guesses=$(($guesses + 1))
 done
 echo "恭喜您:$name,猜中了。 数字为$number 猜测了 $guesses 次 游戏结束."
 exit 0

五.批量创建用户

#!/bin/sh
read -ep "请输入要创建的用户数量:" sl                                   #获取用户键盘输入的值  为$sl
for i in `seq 1 $sl`                                                    #定义i变量进行遍历 从1开始导$sl值 直到i=sl 结束 
do
        grep "user-$i" /etc/passwd &> /dev/null                         #查看在/etc/passwd中有没有该用户 
        if [ $? -ne 0 ];then                                    #-ne  不等于    $? 获取上一条命令的返回值  如果=0 跳到else输出 如果=0 进入if循环 
        useradd user-$i &>/dev/null                                     #创建用户
                if [ $? -eq 0 ];then                                    #-eq   等于    
                echo "user-$i" >> /root/user_name                       #吧创建成功的用户名追加输出到/root/user_name
                echo "user-$i" | passwd user-$i --stdin &> /dev/null    #设置当前创建的用户密码为用户名
                echo "创建成功"
                fi
        else
        echo "user-$i 用户已存在,创建失败!"
        fi      
done            

六.监控mysql主从同步是否正常。

#!/bin/bash
#获取本地服务端口,是否为3306根据情况修改。
MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{ print $5 }'`
#获取本机IP,发邮件报警时调用,可以不写。
MYSQLIP=`ifconfig ens33|grep "inet "|awk -F[:" "]+ '{ print $3 }'`
#显示当前时间,年月时分秒
date=`date "+%Y-%m-%d %H:%M:%S"`
#获取IO及SQL线程行
STATUS=$(mysql -uroot -S /var/lib/mysql/mysql.sock -e "show slave status \G" |grep -i "running")
#提取I/O及SQL线程的状态,Yes或No
IO_env=`echo $STATUS |grep IO |awk '{ print $2 }'`
SQL_env=`echo $STATUS |grep SQL |awk '{ print $2 }'`
#判断变量值是否=本地端口号 
#日志发送格式  mail -s "标题" 邮箱  << "内容"  
#或者  echo "内容"| mail -s mail -s "标题" 邮箱 
if [ "$MYSQLPORT" = "3306" ]; then 
   echo " mysql is running" >/dev/null
 else
   echo "mysql is shutdown"
   echo "$MYSQLIP is shutdown $date" |  mail -s " MYSQL IS shutdown" 70697410@qq.com
fi 
#-a 如果存在即为真 左右两个判断都要同时存在
if [ "IO_env"="Yes" -a "$SQL_env"="Yes" ]; then 
    echo "slave is running!" >/dev/null 
 else
    echo "slave is not running! $date" >> /usr/src/mariadb_error.log  #这里写不写都无所谓 
    echo "slave not running $date" | mail -s "MYSQLIP is not running" 70697410@qq.com 
fi

七.监控系统cpu,大于80%说明可能存在CPU不足

#!/bin/bash
mail='mail -s "cup报警" 70697410@qq.com'
DATE=`date "+%Y-%m-%d %H:%M:%S"`
MYIP=`ifconfig ens33 |grep "inet " |awk -F[:" "]+ '{ print $3 }'`
MASG="您的机器$MYIP$DATE已经CUP使用过高,已经使用了:"
cpu_us=$(vmstat |awk '{print $13}' |sed -n '$p')
cpu_sy=$(vmstat |awk '{print $14}' |sed -n '$p')
cpu_id=$(vmstat |awk '{print $15}' |sed -n '$p')
cpu_sum=$(($cup_us + $cpu_sy))
if (( $cpu_sum >= 80 )) 
  then
 echo "$MASG$cpu_sum%"| $mail  
  else 
 echo "$DATE:CPU资源已经消耗了$cpu_sum%" 
fi

八:shell备份mysql数据库

#!/bin/bash
#backup_mysql
#2021-03-26
Mail= mail -s "MysqlDump fail " 70697410@qq.com
#备份目录 
BackupDir=/home/backup
#共享目录,异机备份
SaveDir=/data/sdv1/backup
#当前日期时间
fdate=`date "+%Y-%m-%d"`
#设置目录属主和属组 赋权
chown -R mysql:mysql $BackupDir
chmod -R 775 $BackupDir
chmod -R 775 $SaveDir
#备份库 
function test () {
      echo "$fdate Begin backup test database" >> $BackupDir/backmysql.log
#判断目录是否存在   -d:存在即为真  !表否定  
  if [ ! -d $BackupDir/mysql ];then 
	  mkdir -p $BackupDir/mysql
	  chown -R mysql:mysql $BackupDir/mysql
  fi 
#备份test库
mysqldump -uroot -p'rootroot' test > $BackupDir/mysql/test_"$fdate".sql
#$?  获取上条命令的执行返回值,正常为0。 
  if [ $? -eq 0 ];then
      echo "$fdate backup test database success" >> $BackupDir/backmysql.log
    else 
      echo "$fdate backup test database fail"   >> $BackupDir/backmysql.log
	  echo "$fdate backup test database fail"  | $Mail
  fi 
}
#压缩备份及删除
function compress () {
      echo "$fdate Begin complete database " >> $BackupDir/backmysql.log
#压缩打包备份文件的目录
      cd $BackupDir
	  tar -cf mysql_$fdate.tar mysql
#如果上条命令执行成功,则删除3天前的备份文件 	  
  if [ $? -eq 0 ];then 
      echo "$fdate complete done" >> $BackupDir/backmysql.log
	  find $BackupDir -mtime +3 -exec rm -rf{} \; 
  fi
#吧本地备份拷贝到异机备份,
      cd $BackupDir
      cp mysql_$fdate.tar $SaveDir
      echo "$fdate cp date to savedir done " >> $BackupDir/backmysql.log
	  nuf=`find $SaveDir -name '*.tar' -size +10M|wc -l`
  if [[ $? -eq 0 && $nuf -gt 3 ]];then
      echo "$fdate delete nfs than 7 days" >> $BackupDir/backmysql.log
  fi 
      echo "$fdate all is ok" >> $BackupDir/backmysql.log
	  cp -r $BackupDir/backmysql.log $SaveDir
}
test
compress


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值