• 2022每天学习一个shell小脚本bash shell脚本文件夹


    1.批量创建用户

    createUsersBulk.sh

    #!/bin/bash
    #批量创建用户
    read -p "Enter The Users Password : " PASSWD
    
    for UNAME in `cat users.txt`
    do
    id $UNAME &> /dev/null
    if [ $? -eq 0 ] ; then
    echo "Already exists"
      else
      useradd $UNAME &> /dev/null
      echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
    
      if [ $? -eq 0 ] ; then
      echo "$UNAME , Create success"                         
      else
      echo "$UNAME , Create failure"
      fi
    fi
    done 
    

    ##############################

    2.猜数字

    numberGuessing.sh

    #!/bin/bash
    #猜数字的小游戏
    PRICE=$(expr $RANDOM % 1000)
    #使用$RANDOM变量来调取出一个随机的数值(范围为0~32767),将这个随机数对1000进行取余操作,并使用expr命令取得其结果
    TIMES=0
    #创建TIMES变量,用于累计用户猜数字的次数
    
    echo "商品实际价格为0-999之间,猜猜看是多少?"
    while true
    do
      read -p "请输入您猜测的价格数目:" INT
      #read读取输入的数值
      let TIMES++
      #TIMES变量自增1,即猜数字次数累计1次
        if [ $INT -eq $PRICE ] ; then
        #如果输入的数字跟随机生成的数字一致,说明猜对了。
        echo "恭喜您答对了,实际价格是 $PRICE"
        echo "您总共猜测了 $TIMES 次"
        exit 0
        #终止脚本执行
        
        elif [ $INT -gt $PRICE ] ; then
        #输入数字比生成数字高,提示太高
        echo "太高了!"
        else
        #兜底,既猜不对数字,又不是比生成数字高,那就是太低了
        echo "太低了!"
        fi
    done
    

    ##############################

    3.判断用户输入的字符是数字、字母还是其他字符

    Checkkeys.sh

    #!/bin/bash
    #用case语句和通配符判断用户输入的字符是数字、字母还是其他字符。
    read -p "请输入一个字符,并按Enter键确认:" KEY
    
    case "$KEY" in
    [a-z]|[A-Z])
    #如果输入的字符(只能是1位,aD则会跳到兜底)是大写字母或者小写字母,则输出是字母
    echo "您输入的是 字母。"
    ;;
    
    [0-9])
    #如果是数字(只能1位,10、99等则会跳到兜底),则输出是数字
    echo "您输入的是 数字。"
    ;;
    
    *)
    #兜底,输出其他字符
    echo "您输入的是 空格、功能键或其他控制字符。"
    esac
    

    ##############################

    4.找出能登录的用户

    findLogin_Users.sh

    #!/bin/bash
    #找出/etc/passwd中能登录的用户,并将对应在/etc/shadow中第二列密码提出处理
    
    shells=`awk -F: '$7!~"nologin"{print $1","$7}' /etc/passwd`
    for shell in $shells
    do
      if [[ "`grep -v '^#' /etc/shells`" =~ "`echo $shell | cut -d, -f2`" ]]; then
        users="$users `echo $shell | cut -d, -f1`"
      fi
    done
    
    for user in $users
    do
      awk -F: -v u=$user '$1~u{print $1,$2}' /etc/shadow
    done
    

    ##############################

    5.扫描主机端口状态

    scanPort.sh

    #!/bin/bash
    #扫描主机端口状态
    
    HOST=$1
    PORT="22 25 80 8080"
    
    for PORT in $PORT; do
      if echo &>/dev/null > /dev/tcp/$HOST/$PORT; then
        echo "$PORT open"
      else
        echo "$PORT close"
      fi
    done
    

    ##############################

    6.统计/var/log有多少个文件 | 查找Linux系统中的僵尸进程

    #统计/var/log有多少个文件
    echo "文件总量为:"`find /var/log -maxdepth 1 -type f | wc -l`
    
    
    
    #查找Linux系统中的僵尸进程
    ps aux | awk '{if($8 == "Z" ){print $2,$11}}'
    

    ##############################

    7.检测所处网段主机的开关机状态

    detectNet.sh

    #!/bin/bash
    #检测所处网段主机的开关机状态
    i=1
    while [ $i -le 254 ]
    do
      ping -c2 -i0.2 -W1 192.168.108.$i &>/dev/null
      if [ $? -eq 0 ] ;then
        echo -e "\e[32;1m192.168.108.$i is up[0m"
      else
        echo "192.168.108.$i is down"
      fi
    let i++
    done
    

    ##############################

    8.查找最大文件

    findLargfile.sh

    #!/bin/bash
    #查找最大文件
    a=0
    for  name in *.*
    do
      b=$(ls -l $name | awk '{print $5}')
      if test $b -ge $a
      then a=$b
      namemax=$name
      fi
    done
    
    echo "the max file is $namemax"
    

    ##############################

    9.批量修改文件名

    bEditFilename.sh

    #!/bin/bash
    #批量修改文件名
    for file in $(ls \*.\txt | cut -d. -f1); 
    do
      mv $file* $file.log
    done
    

    ##############################

    10.监视本机内存、/分区剩余空间

    monitorRamHd.sh

    #!/bin/bash
    #监视本机内存、/分区剩余空间,当剩余空间达到阈值发送报警邮件给root管理员
    
    disk_value=60000
    mem_value=5000
    disk_size=`df -m / | awk '/\//{print $4}'`      #获取/的剩余硬盘空间,单位M
    mem_size=`free -m | awk '/Mem/{print $4}'`      #获取剩余内存空间,单位M
    
    if [ $disk_size -le $disk_value -o $mem_size -le $mem_value ]; then
        echo "Insufficient resources,资源不足" | mail -s "Warning" root     #达到阈值发送邮件给root
    fi
    

    ##############################

    11.记录目录下文件操作

    recordFileOperat.sh
    场景:记录目录下文件操作。
    需先安装inotify-tools软件包。

    #!/bin/bash
    #监控目录,将新创建的文件名追加到日志中
    
    MON_DIR=/root/test
    inotifywait -mq --format %f -e create $MON_DIR |\
    while read files; 
    do
      echo $files >> test.log
    done
    

    ##############################

    12.将位置参数拆分为到每个变量

    positional_argument_split.sh

    #!/bin/bash
    #将位置参数192.168.108.1{1,2}拆分为到每个变量
    
    num=0
    for i in $(eval echo $*);
    do
      let num+=1
      eval node${num}="$i"
    done
    echo $node1 $node2
    

    ##############################

    13.输入数字运行相应命令

    digitalRunBin.sh

    #!/bin/bash
    ##############################################################
    #输入数字运行相应命令
    ##############################################################
    echo "*cmd menu* 1-date 2-ls 3-who 4-pwd 0-exit "
    while :
    do
    #捕获用户键入值
    read -p "please input number :" n
    n1=`echo $n|sed s'/[0-9]//'g`
      #空输入检测 
      if [ -z "$n" ]
      then
      continue
      fi
    
      #非数字输入检测 
      if [ -n "$n1" ]
      then
      exit 0
      fi
    break
    done
    
    case $n in
    1)
    date
    ;;
    2)
    ls
    ;;
    3)
    who
    ;;
    4)
    pwd
    ;;
    0)
    break
    ;;
    #输入数字非1-4的提示
    *)
    echo "please input number is [1-4]"
    esac
    

    ##############################

    14.接受系统当前用户名为参数,判断用户

    judgeUser.sh

    #!/bin/bash
    #接受系统当前用户名为参数;判断其为管理员root,系统用户system,普通用户user;
    
    userid=$(id -u)
    
    if [ $userid -eq 0 ];then
    echo "root"
    elif [ $userid -gt 0 -a $userid -lt 500 ];then
    echo "system"
    else
    echo "user"
    fi
    

    ##############################

    15.检测网卡流量

    detectNetTraffic.sh

    #!/bin/bash
    #######################################################
    #检测网卡流量,并按规定格式记录在日志中
    #规定一分钟记录一次
    #日志格式如下所示:
    #2022-04-20 10:00
    #ens33 input: 1234bps
    #ens33 output: 1235bps
    #######################################################
    
    while :
    do
    #设置语言为英文,保障输出结果是英文,否则会出现bug
    LANG=en
    logfile=/tmp/\`date +%d\`.log
    
    #将下面执行的命令结果输出重定向到logfile日志中
    exec >> $logfile
    date +"%F %H:%M"
    #sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8
    sar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,"\t","input:","\t",$5*1000*8,"bps","\n",$2,"\t","output:","\t",$6*1000*8,"bps"}'
    echo "####################"
    #因为执行sar命令需要59秒,因此不需要sleep
    done
    

    ##############################

    16.shell读取文件的每一行内容

    readFile_outLine.sh

    #!/bin/bash
    #shell读取文件的每一行内容并输出,方法1
    cat file_test | while read line
    do
      echo $line
    done
    
    
    
    ################################,方法2
    #for line in \`cat file_test\`
    #do
    #    echo $line
    #done
    

    ##############################

    17.监控磁盘使用率

    monitorDiskUsage.sh

    #!/bin/bash
    #监控磁盘使用率
    disks=(\`df |sed 1d | awk '{print $1,$5}'|tr -d %\`)
    
    len=${#disks[@]}
    for ((i=1;i<=$len;i=i+2));do
    if [ ${disks[i]} -gt 80 ];then
        echo "${disks[$i-1]} ${disks[$i]}"
    fi
    done
    

    ##############################

    18.找出5分钟内修改的文件

    modified_FilesList.sh

    #!/bin/bash
    #找出5分钟内修改的文件
    touch -t $(date -d "5 min ago" +%Y%m%d%H%M) /tmp/temp.tmp
    
    find $1 -newer /tmp/temp.tmp 2>/dev/null
    rm -rf /tmp/temp.tmp
    

    ##############################

    19.MariaDB数据库备份

    databaseBackup.sh

    #!/bin/bash
    #MariaDB数据库备份
    DATE=$(date +%F_%H-%M-%S)
    HOST=127.0.0.1
    DB=zabbix
    USER=root
    PASS=sbt123456
    MAIL="root@mytest001"
    BACKUP_DIR=/abcs/data/db_backup
    SQL_FILE=${DB}_full_$DATE.sql
    BAK_FILE=${DB}_full_$DATE.zip
    
    cd $BACKUP_DIR
    if mysqldump -h$HOST -u$USER -p$PASS --single-transaction --routines --triggers -B $DB > $SQL_FILE; then
    zip $BAK_FILE $SQL_FILE && rm -f $SQL_FILE
    if [ ! -s $BAK_FILE ]; then
      echo "$DATE 内容" | mail -s "主题" $MAIL
    fi
    else
      echo "$DATE 内容" | mail -s "主题" $MAIL
    fi
    find $BACKUP_DIR -name '*.zip' -ctime +14 -exec rm {} \;
    

    ##############################

    20.Linux下如何寻找相同文件

    findHardLinks.sh

    #!/bin/bash
    #Linux下如何寻找相同文件
    
    prev=""
    
    # list files by inode
    ls -i | sort -n > /tmp/$0
    
    # search through file for duplicate inode #s
    while read line
    do
      inode=\`echo $line | awk '{print $1}'\`
      if [ "$inode" == "$prev" ]; then
      grep $inode /tmp/$0
      fi
    prev=$inode
    done < /tmp/$0
    
    # clean up
    rm /tmp/$0
    

    ##############################

    21.禁用rm命令,使用mv命令给linux建立回收站

    vim ~/.bashrc

    #!/bin/bash
    #禁用rm命令,使用mv命令给linux建立回收站
    #设置别名,rm是删除文件,rl是查看回收站,ur是恢复文件
    alias rm='trash'  
    alias rl='trashlist'  
    alias ur='undelfile'  
    
    #替换rm指令移动文件到~/.trash/中   
    trash()  
    {  
      mv $@  ~/.trash/  
    } 
    
    #显示回收站中垃圾清单  
    trashlist()  
    {  
     echo -e "33[32m==== Garbage Lists in ~/.trash/ ====33[0m"  
     echo -e "\a33[33m----Usage------33[0m"  
     echo -e "\a33[33m-1- Use 'cleartrash' to clear all garbages in ~/.trash!!!33[0m"  
     echo -e "\a33[33m-2- Use 'ur' to mv the file in garbages to current dir!!!33[0m"  
     ls -al  ~/.trash  
    }  
    
    #找回回收站相应文件   
    undelfile()  
    {  
     mv -i ~/.trash/$@ ./  
    }  
    
    #清空回收站   
    cleartrash()  
    {  
     echo -ne "\a33[33m!!!Clear all garbages in ~/.trash, Sure?[y/n]33[0m"  
     read confirm  
     if [ $confirm == 'y' -o $confirm == 'Y' ] ;then  
      /bin/rm -rf ~/.trash/*  
      /bin/rm -rf ~/.trash/.* 2>/dev/null  
    fi    
    }
    
    #Source global definitions
    if [ -f /etc/bashrc ]; then
    . /etc/bashrc
    fi
    

    ##############################

    22.统计当前Linux系统中可以登陆计算机的账户数量

    findLogin_Users2.sh

    #!/bin/bash
    #统计当前Linux系统中可以登陆计算机的账户数量
    
    for shell in \`awk -F: '{print $7}' /etc/passwd\`         #取出账号文件中各账号的解释器
    do
      if [[ "\`cat /etc/shells\`" =~ "$shell" ]]; then      #检测取出的解释器是否包含在可登录解释器中
        let n++
      fi
    done
    echo $n
    

    ##############################

    23.使用case编写一个菜单脚本

    caseMenu.sh

    #!/bin/bash
    #使用case编写一个菜单脚本 
    cat<<EOF
    1. install rsync
    2. install nfs
    3. install mysql
    4. install all
    EOF
    
    read -p '请输入你的选择:' chs
    
    case $chs in
    1)
    echo install rsync success
    ;;
    2)
    echo install nfs success
    ;;
    3)
    echo install mysql success
    ;;
    4)
    echo install rsync/nfs/mysql success
    ;;
    *)
    echo "你输入有误"
    esac
    

    ##############################

    24.Samba安装脚本

    sambaInstall.sh

    #!/bin/bash
    #Samba安装脚本
    
    [ -d /abcs/shared ] || mkdir -p /abcs/shared
    rpm -qa | grep samba-4. &>/dev/null
    
    if [ $? -eq  1 ] 
    then 
      yum install samba -y &>/dev/null
    fi
    
    systemctl start smb
    systemctl status smb
    
    #创建用于访问共享资源的账户信息。账户必须在当前系统已经存在
    id sambaUser
    if [ $? -eq  1 ] 
    then 
      groupadd sambaUser &>/dev/null
      useradd -g sambaUser sambaUser &>/dev/null
      echo "sambaUser User has been created."
    else
      echo "sambaUser User has been created."
    fi
    
    pdbedit -a -u sambaUser
    
    
    #文件读写权限的问题,还需要考虑应用于该目录的SELinux安全上下文所带来的限制
    chown -Rf sambaUser:sambaUser /abcs/shared
    semanage fcontext -a -t samba_share_t /abcs/shared
    restorecon -Rv /abcs/shared
    
    #设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录
    setsebool -P samba_enable_home_dirs on
    getsebool -a | grep samba
    
    
    #在Samba服务程序的主配置文件中,追加共享文件夹配置参数信息
    cd /etc/samba/
    echo "[database]" >> smb.conf
    echo "comment = Do not arbitrarily modify the database file" >> smb.conf
    echo "path = /abcs/shared" >> smb.conf
    echo "public = on" >> smb.conf
    echo "writable = yes" >> smb.conf
    
    
    #重启Samba服务并加入开机启动项。为避免防火墙妨碍,清空iptables防火墙
    systemctl restart smb
    systemctl enable smb
    
    iptables -F
    

    ##############################

    25.自动优化Linux内核参数

    optimizingKernelParam.sh

    #!/bin/bash
    #此脚本针对RHEL7系列
    cat >> /usr/lib/sysctl.d/00-system.conf << EOF
    fs.file-max=65535
    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_synack_retries = 5
    net.ipv4.tcp_syn_retries = 5
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30
    #net.ipv4.tcp_keepalive_time = 120
    net.ipv4.ip_local_port_range = 1024 65535
    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernek.shmmin = 4096
    kernel.sem = 5010 641280 5010 128
    net.core.wmem_default=262144 
    net.core.wmem_max=262144 
    net.core.rmem_default=4194304 
    net.core.rmem_max=4194304 
    net.ipv4.tcp_fin_timeout = 10 
    net.ipv4.tcp_keepalive_time = 30 
    net.ipv4.tcp_window_scaling = 0 
    net.ipv4.tcp_sack = 0 
    EOF 
    

    ##############################

    26.5.1的休息;5.2的休息。明天继续学习计划。

    ##############################

    27.实现类似手机通讯计费功能

    mobileBilling.sh

    #!/bin/bash
    #############################################################
    #手机计费
    
    sum=1000
    i=15
    
    
    while [ $sum -ge 15 ]
      do
    cat<<EOF
    =================
    1.发短信
    2.查余额
    3.账户充值
    4.退出
    =================
    EOF
        read -p "你要做什么呢?" Some
        case "$Some" in
          1)
            sum=$((sum-i))
            read -p  "请输入发送短信的内容:"
            read -p  "请输入收信人:"
            sleep 0.3
            echo "发送成功."
            echo "您当前余额为$sum"
            ;;
          2)
            echo "您当前余额为$sum"
            ;;
          3)
            read -p "请输入你要充值的金额:" ChongZhi
            sum=$((sum+ChongZhi))
            echo "充值成功,当前余额为$sum"
            ;;
          4)
            exit
            ;;
          *)
            echo "输入有误!"
            exit 2
        esac
    done
    
    echo "余额不足,请及时充值!"
    

    ##############################

    28.批量检查多个网站地址是否正常

    check_url.sh

    #!/bin/bash
    #批量检查多个网站地址是否正常
    url=(
    http://www.baidu.com
    https://www.cnblogs.com/yachengmuCC/
    http://10.0.0.7
    )
    
    while true 
      do
        for i in ${url[@]} 
          do 
          #curl $i &>/dev/null
          a=$(curl -I -w "%{http_code}\n" -o /dev/null -s $i)
          if [ $a -eq 200 ]
            then
              echo "$url 正常"
          fi
        done
        sleep 10
    done
    

    ##############################

    29.批量生成随机字符文件名案例

    make_file.sh

    #!/bin/bash
    #批量生成随机字符文件名案例
    #在/root/202205目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串【20220505】
    
    [ -d /root/202205 ] || mkdir -p /root/202205
    rpm -qa |grep pwgen &>/dev/null
    
    if [ $? -eq  1 ] 
    then 
      yum install pwgen -y &>/dev/null
    fi
    
    cd /root/202205 &&\
    for i in {1..10}
    do
    #File_Name=`uuidgen |tr "0-9-" "a-z"|cut -c 1-10`
    File_Name2=`pwgen -1A0 10`
    touch ${File_Name2}_20220505.html
    done
    

    ##############################

    30.改网络配置,并生效

    auto_IP_alter.sh

    #!/bin/bash
    #改网络配置,并生效
    
    IPPATH=/etc/sysconfig/network-scripts/ifcfg-ens33
    IP=`cat $IPPATH |grep "IPADDR="|awk -F "=" '{print$2}'`
    NET=`cat $IPPATH |grep "NETMASK="|awk -F "=" '{print$2}'`
    GAT=`cat $IPPATH |grep "GATEWAY="|awk -F "=" '{print$2}'`
    BOOT=`cat $IPPATH |grep "BOOTPROTO=" |awk -F "=" '{print$2}'`
    
    #-------------判断网络模式并判断是否需追加ip信息-----------------------------
    cat /etc/sysconfig/network-scripts/ifcfg-ens33 |grep "IPADDR" &>/dev/null
    
    if [ $? -eq 0 ];then
            ls &>/dev/null
    else
            echo "#IPADDR=192.168.108.90" >> $IPPATH
            echo "#NETMASK=255.255.255.0" >> $IPPATH
            echo "#GATWAY=192.168.108.2" >> $IPPATH
    fi
    
    #------------------------菜单显示--------------------------------------------
    echo -e "\033[35m----------------------------------------------\033[0m"
    echo -e "\033[35m-------------欢迎使用IP修改工具---------------\033[0m"
    echo -e "\033[35m----------------------------------------------\033[0m"
    
    if [[ $BOOT = dhcp ]];then
            echo -e "\033[37m现在的网络模式是:$BOOT\033[0m"
    
    else
            echo -e "\033[37m现在的网络模式是:$BOOT\033[0m"
            echo -e "\033[37m现在的IP是:$IP\033[0m"
            echo -e "\033[37m现在的mask是:$NET\033[0m"
            echo -e "\033[37m现在的gatway是:$GAT\033[0m"
    
    fi
    
    echo -e "\033[32m请按选项选择修改:\033[0m"
    echo -e "\033[31m1)   | 修改IP\033[0m"
    echo -e "\033[31m2)   | 修改mask\033[0m"
    echo -e "\033[31m3)   | 修改gatway\033[0m"
    echo -e "\033[31m4)   | 修改网络模式\033[0m"
    echo -e "\033[31mq)   | 退出\033[0m"
    echo -e "\033[35m----------------------------------------------\033[0m"
    
    #------------------------修改内容-------------------------------
    
    #------------------------IP修改---------------------------------
    
    function IPADDR (){
            read -p "请输入您要修改的IP:" i
    
            sed -i "s/$IP/$i/g" $IPPATH
    
            if [ $? = 0  ];then
                    echo -e "\033[36m修改成功!\033[0m"
            else
                    echo -e "\033[36m修改失败!\033[0m"
            fi
    }
    
    #-----------------------掩码修改--------------------------------
    function NETMASK (){
            read -p "请输入您要修改的子网掩码:" i
    
            sed -i "s/$NET/$i/g" $IPPATH
    
            if [ $? = 0  ];then
                    echo -e "\033[36m修改成功!\033[0m"
            else
                    echo -e "\033[36m修改失败!\033[0m"
            fi
    
    }
    
    #-----------------------网关修改--------------------------------
    function GATWAY (){
            read -p "请输入您要修改的网关:" i
    
            sed -i "s/$GAT/$i/g" $IPPATH
    
            if [ $? = 0  ];then
                    echo -e "\033[36m修改成功!\033[0m"
            else
                    echo -e "\033[36m修改失败!\033[0m"
            fi
    
    }
    
    #-----------------------注释IP信息-------------------------------
    function DHCP (){
            sed -i 's/^IPADDR/#IPADDR/g' $IPPATH
            sed -i 's/^NETMASK/#NETMASK/g' $IPPATH
            sed -i 's/^GATWAY/#GATWAY/g' $IPPATH
    
            if [ $? = 0  ];then
                    echo -e "\033[36m修改成功!\033[0m"
            else
                    echo -e "\033[36m修改失败!\033[0m"
            fi
    
    }
    
    #-----------------------开放IP信息-------------------------------
    function STATIC (){
            sed -i 's/^#IPADDR/IPADDR/g' $IPPATH
            sed -i 's/^#NETMASK/NETMASK/g' $IPPATH
            sed -i 's/^#GATWAY/GATWAY/g' $IPPATH
    
            if [ $? = 0  ];then
                    echo -e "\033[36m修改成功!\033[0m"
            else
                    echo -e "\033[36m修改失败!\033[0m"
            fi
    
    }
    
    #-----------------------网络模式修改-----------------------------
    function BOOT (){
            read -p "请输入您要修改的网络模式:" i
    
            sed -i "s/$BOOT/$i/g" $IPPATH
            sleep 2
    
            if [[ $i = dhcp ]];then
                    DHCP
            else
                    STATIC
            fi
    }
    
    #-----------------------功能调用----------------------------------
    read -p "请输入您要修改的选项:" i
    
    case $i in
            1)
            IPADDR
            ;;
    
            2)
            NETMASK
            ;;
    
            3)
            GATWAY
            ;;
    
            4)
            BOOT
            ;;
    
            q)
            exit
            ;;
    
            *)
            echo -e "\033[36m请输入正确选项!\033[0m"
            sh ip.sh
    esac
    
    #-----------------------重启服务----------------------------------
    echo -e "\033[36m正在重启网络服务……\033[0m"
    
    /etc/init.d/network restart &>/dev/null
    
    if [ $? -eq 0 ];then
            echo -e "\033[36m网络服务启动成功!\033[0m"
    else
            echo -e "\033[36m网络服务启动失败!\033[0m"
    fi
    

    ##############################

    31.源码包安装前准备工作。【下载包,到指定目录;解压到指定目录;是否删除包。】

    beforeInstall.sh

    #!/bin/bash
    #源码包安装前准备工作。【下载包,到指定目录;解压到指定目录;是否删除包。】
    
    echo "源码包安装前准备工作。"
    
    read -p "请切换到包下载目录:" DOWND
    [ -d $DOWND ] || mkdir -p $DOWND
    cd $DOWND
    pwd
    
    read -p "请输入下载包的链接:" WGET
    wget $WGET
    ls
    
    read -p "请输入解压包的包名:" BAGS
    tar -xvf $BAGS
    
    
    read -p "是否删除包?y and n :" Some
    
        case "$Some" in
          y)
            rm $BAGS
            ;;
          n)
            exit 0
            ;;
          *)
            echo "输入有误!"
            exit 2
        esac
    

    ##############################

    32.linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行

    #!/bin/sh
    sleep 10
    PID=`ps aux | grep lstm_prob.py | awk '{print $2}'`
    
    if [ -n "$PID" ]; then
      sleep 10
      ps -ef|grep -v grep|grep lstm_prob.py |awk '{print "kill -9 "$2}'|sh
    fi
    
    cd /root/tf/
    nohup /usr/local/bin/python3.6 lstm_prob.py >nohup.out 2>&1 &
    

    ##############################

    33.监控httpd服务80端口状态,服务异常输出报警信息,并尝试启动,服务正常时提示正常运行。

    #!/bin/bash
    #监控httpd服务80端口状态,服务异常输出报警信息,并尝试启动,服务正常时提示正常运行。
    web=`netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'`
    apachelog=/var/log/httpd/service.log
    if [ '$web' = '80' ]
    then
          echo "HTTPD正在运行"
    else
          echo "Web服务重新启动"
          echo "`date` Web服务重新启动" >> $apachelog
          /etc/init.d/httpd start &> /dev/null
          sleep 2
          echo `date` 重新启动 | /usr/sbin/sendmail -v  16605681432@163.com > /dev/null
    fi
    

    ##############################

    34.释放内存脚本

    freemem.sh

    #!/bin/bash
    
    used=`free -m | awk 'NR==2' | awk '{print $3}'`
    
    free=`free -m | awk 'NR==2' | awk '{print $4}'`
    
    echo "===========================" >> /var/log/mem.log
    
    date >> /var/log/mem.log
    
    echo "Memory usage | [Use:${used}MB][Free:${free}MB]" >> /var/log/mem.log
    
    if [ $free -le 1000 ] ; then
    
                sync && echo 1 > /proc/sys/vm/drop_caches
    
                sync && echo 2 > /proc/sys/vm/drop_caches
    
                sync && echo 3 > /proc/sys/vm/drop_caches
    
                echo "OK" >> /var/log/mem.log
    
    else
    
                echo "Not required" >> /var/log/mem.log
    
    fi
    

    定时任务命令

    echo "*/30 * * * * root /home/freemem.sh" >> /etc/crontab
    

    ##############################

    35.lftp.sh自动上传脚本

    #!/bin/bash
    echo -e "\nScript start at \033[43;35m `date "+%H:%M:%S"` \033[0m"
    echo -e "\033[1;34m-----------------------------------------------------------------------\033[0m"
    cd /root/upload ; rm -fr /root/upload/*
    git clone git@10.35.33.29:xiaoban/server-api/xiaoban-server.git
    mv /root/upload/xiaoban-server/* /root/upload/ ; rm -fr /root/upload/xiaoban-server
    tar zcvf code.tar.gz ./* >/dev/null
    
    
    lftp << EOF
    open ftp://xiaoban:xiaoban@2018@ftp.wjoyxt.ren
    cd
    put /root/upload/code.tar.gz
    close
    bye
    EOF
    rm -fr /root/upload/*
    echo -e "\033[1;34m-----------------------------------------------------------------------\033[0m"
    echo -e "Script end at \033[43;35m `date "+%H:%M:%S"` \033[0m \n "
    

    ##############################

    36.5.12脚本。

    ##############################

    37.5.13脚本。

    ##############################

    38.5.14脚本。

    ##############################

    39.5.15脚本。

    ##############################

    40.5.16脚本。

    ##############################

    41.5.17脚本。

    ##############################

    42.5.18脚本。

    ##############################

    43.5.19脚本。

    ##############################

    44.5.20脚本。

    ##############################

    45.5.21脚本。

    ##############################

    46.5.22脚本。

    ##############################

    47.5.23脚本。

    ##############################

    48.5.24脚本。

    ##############################

    49.httpd_源码包安装脚本

    #!/bin/bash
    # httpd-2.4.46
    
    # create apache files
    mkdir  /usr/src/apache_tar_gz
    
    
    # centos yi_lai
    yum -y install make gcc gcc-c++ kernel-devel m4  ncurses-devel openssl-devel expat-devel
    
    # install apr
    cd /usr/src/apache_tar_gz
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.gz
    tar zxf apr-1.7.0.tar.gz
    cd ./apr-1.7.0
    ./configure --prefix=/usr/local/apr
    make && make install
    
    # install apr-util
    cd /usr/src/apache_tar_gz
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
    tar zxf apr-util-1.6.1.tar.gz
    cd ./apr-util-1.6.1
    ./configure --prefix=/usr/local/apr-util \
      --with-apr=/usr/local/apr
    make && make install
    
    # install zlib
    cd /usr/src/apache_tar_gz
    wget https://zlib.net/fossils/zlib-1.2.11.tar.gz
    tar zxf zlib-1.2.11.tar.gz
    cd ./zlib-1.2.11
    ./configure --prefix=/usr/local/zlib
    make && make install
    
    # install pcre
    cd /usr/src/apache_tar_gz
    wget https://sourceforge.net/projects/pcre/files/pcre/8.44/pcre-8.44.tar.gz
    tar zxf pcre-8.44.tar.gz
    cd ./pcre-8.44
    ./configure --prefix=/usr/local/pcre
    make && make install
    
    # install openssl
    cd /usr/src/apache_tar_gz
    wget https://ftp.openssl.org/source/openssl-1.1.1j.tar.gz
    tar zxf openssl-1.1.1j.tar.gz
    cd ./openssl-1.1.1j
    ./config -fPIC --prefix=/usr/local/openssl enable-shared
    make && make install
    
    
    # install httpd
    cd /usr/src/apache_tar_gz
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.53.tar.gz
    tar zxf httpd-2.4.53.tar.gz
    cd ./httpd-2.4.53
    cp -r ../apr-1.7.0 srclib/apr
    cp -r ../apr-util-1.6.1 srclib/apr-util
    ./configure --prefix=/usr/local/httpd \
      --enable-so \
      --enable-cgi \
      --enable-cgid \
      --enable-ssl \
      --with-ssl=/usr/local/openssl \
      --enable-rewrite \
      --with-pcre=/usr/local/pcre \
      --with-z=/usr/local/zlib \
      --with-apr=/usr/local/apr \
      --with-apr-util=/usr/local/apr-util \
      --enable-modules=most \
      --enable-mods-shared=most \
      --enable-mpms-shared=all \
      --with-mpm=event \
      --enable-proxy \
      --enable-proxy-fcgi \
      --enable-expires \
      --enable-deflate \
      --with-included-apr
    make && make install
    
    # 
    ln -s /usr/local/httpd/bin/* /usr/local/bin
    
    cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
    echo "# chkconfig: 35 85 85
    # description: apache 2.4.53" >> /etc/init.d/httpd
    chkconfig --add httpd
    
    
    
    echo "__end__"
  • 相关阅读:
    PHP 小方法之 算生日
    PHP 小方法之 随机生成几位字符串
    PHP 小方法之 过滤参数
    PHP 小方法之 计算两个时间戳之间相差的日时分秒
    PHP 小方法之 仿百度蜘蛛采集
    PHP 小方法之 显示 今天 昨天 上周 上月 近三月 的时间
    PHP保留两位小数的几种方法
    mysql 常用命令(一)
    PHP数据库页面增删查
    PHP数据库登陆注册简单做法
  • 原文地址:https://www.cnblogs.com/yachengmuCC/p/16004280.html
Copyright © 2020-2023  润新知