zoukankan      html  css  js  c++  java
  • shell脚本实践之九五二八(一)

    2019.08.28

     1. 编写一个shell脚本,判断192.168.1.0/24络内,在线的ip有哪些,能ping通就代表在线。

    [root@shell scripts]# vim 001-judge_ip.sh
    #!/bin/bash
    
    for ip in $(seq 254)
    do
      ping -c 1 192.168.1.$ip &>/dev/null
      if [ $? = 0 ];then
        echo 192.168.1.$ip is online
      fi
    done
    

    2019.08.29

     1. 编写一个shell脚本,批量创建5个用户并且创建8位随机密码。

    # 第一种方法
    [root@shell scripts]# vim 002-creat_user.sh
    #!/bin/bash
    
    for u in user{01..05}
    do
      useradd $u
      PWD=`tr -dc '0-z' </dev/urandom | head -c 8`
      echo -e "user:$u
    password:$PWD" >>/tmp/user.txt
      echo "$u:$PWD" | chpasswd
    done
    # 第二种方法
    [root@shell scripts]# vim 002-creat_user.sh
    #!/bin/bash
    
    for u in oldboy{01..05}
    do
      useradd $u
      for p in `echo $RANDOM | md5sum | cut -c 1-8`
      do
        echo -e "user:$u
    password:$p" >>/tmp/user.txt
        echo "$u:$p" | chpasswd
      done
    done
    
    

    2019.08.30

     1. 写一个批量分发公钥的脚本。

    # CentOS 7.x版本
    [root@shell scripts]# vim batch.sh
    #!/bin/bash
    
    PWD=接收公钥主机的密码
    
    rm -rf /root/.ssh/id_dsa*
    ssh-keygen -t dsa -f /root/.ssh/id_dsa -P '' -q
    
    for ip in $*
    do
      sshpass -p $PWD ssh-copy-id -i /root/.ssh/id_dsa.pub -o StrictHostKeyChecking=no $ip &>/dev/null
      if [ $? != 0 ];then
        echo -e "
    ----- $ip distribution of failure -----
    " 
        continue
      fi
    done
    

    2019.09.01

     1. 猜数字游戏,60以内的整数。

    [root@shell scripts]# vim guess_number.sh
    #!/bin/bash
    
    RAN=$((RANDOM%61))
    COUNT=0
    
    while true
    do
      read -p 'Please enter a number:' num
      ((COUNT++))
      expr $num + 0 &>/dev/null
      if [ $? -ne 0 -o $num -gt 60 ];then
        echo 'Invalid parameter,Please enter an integer within 60'
      else
        if [ $num -eq $RAN ];then
          echo "Bingo!You guessed right,$COUNT times"
          exit
        elif [ $num -gt $RAN ];then
          echo 'too big'
        else
          echo 'too small'
        fi
      fi
    done
    

    2019.11.04

     1. 找出目录中大于200M的日志文件并压缩,压缩文件仍保留在原目录中,压缩完成后删除原日志文件。

    [root@shell scripts]# vim find.sh
    #!/bin/bash
    
    for file in `find /data/logs -type f -name '*.log' -size +200M`
    do
            filename=`basename  ${file}`
            dirname=`dirname  ${file}`
            cd ${dirname}
            tar -zcPf ${filename}.tar.gz ${filename} --remove-files
    done
    

    2019.12.06

     1. CentOS 6&7 初始化脚本

    # 首先需要启动你的网卡(根据实际的网卡名称,可用ip a查看网卡名)。
    [root@shell scripts]# ifup eth0
    [root@shell scripts]# cat optimize.sh
    #!/bin/bash
    
    # Author:JingXue
    # CreateDate:2019/12/06
    # Description:CentOS 6&7 初始化脚本
    
    NET=`ip a | egrep 'ens|eth0' | head -1 | awk -F '[ :]+' '{print $2}'`
    VERSION=`cat /etc/redhat-release | awk -F '.' '{print $1}' | awk '{print $NF}'`
    
    set_network () {
            egrep 'ONBOOT=yes|ONBOOT="yes"' /etc/sysconfig/network-scripts/ifcfg-${NET} &>/dev/null || sed -i 's/ONBOOT.*/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-${NET}
            grep persistent /etc/rc.local &>/dev/null || echo '>/etc/udev/rules.d/70-persistent-net.rules' >>/etc/rc.local            # 初始化模板时需要执行
            egrep 'HWADDR|UUID' /etc/sysconfig/network-scripts/ifcfg-${NET} &>/dev/null && sed -ri '/HWADDR|UUID/d' /etc/sysconfig/network-scripts/ifcfg-${NET}   # 初始化模板时需执行
    }
    
    set_yum_repos() {                       # 阿里云主机可省此步骤
        grep aliyun CentOS-Base.repo.bak &>/dev/null
        if [ $? != 0 ];then
            mv /etc/yum.repos.d/CentOS-Base.repo{,.bak}
            if [ ${VERSION} = 6 ];then
                curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
            elif [ ${VERSION} = 7 ];then
                curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
            fi
        else
            continue
        fi
    }
    
    set_public() {
        yum clean all && yum makecache fast
        yum -y update
        yum -y install epel-release
        yum -y install tree lrzsz nmap nc telnet vim wget lsof net-tools bash-completion bash-completion-extras psmisc bind-utils sysstat htop yum-utils sshpass git expect unzip
        grep 'rm=' /etc/bashrc &>/dev/null || echo "alias rm='rm is not used'" >>/etc/bashrc
        grep 'PS1=' /etc/profile &>/dev/null || echo 'export PS1="[e[37;40m][[e[31;40m]u[e[37;40m]@h [e[33;40m]W[e[0m]]\$ "' >>/etc/profile
        source /etc/profile /etc/bashrc
        grep 'SELINUX=disabled' /etc/selinux/config &>/dev/null || sed -i.bak 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config      # 阿里云ECS可省
        setenforce 0        # 阿里云ECS可省
        grep 'time sync' /var/spool/cron/root &>/dev/null || echo -e '# time sync
    */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root    # 阿里云ECS可省
    }
    
    set_limits() {
        grep 'nofile 65536' /etc/security/limits.conf &>/dev/null || echo -e '* soft nofile 65536
    * hard nofile 65536' >>/etc/security/limits.conf
    cat >>/etc/sysctl.conf <<EOF
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_fin_timeout = 30
    vm.max_map_count=262144
    EOF
        sysctl -p
        if [ ${VERSION} = 6 ];then
            sed -i 's/1024/4096/g' /etc/security/limits.d/90-nproc.conf
        else
            continue
        fi
    }
    
    set_hostname() {
        read -p '请设置主机名:' HOSTNAME
        if [ ${VERSION} = 6 ];then
            hostname ${HOSTNAME}
            sed -i.bak "s/^HOST.*/HOSTNAME=${HOSTNAME}/" /etc/sysconfig/network
            sed -i.bak "s/localhost.localdomain/${HOSTNAME}/" /etc/hosts
        elif [ ${VERSION} = 7 ];then
            hostnamectl set-hostname ${HOSTNAME}
            sed -i.bak "s/localhost.localdomain/${HOSTNAME}/" /etc/hosts
        fi
    
    }
    
    set_services() {
        if [ ${VERSION} = 6 ];then
            service iptables stop
            service postfix stop
            chkconfig iptables off
            chkconfig postfix off
            chkconfig network on
            chkconfig sshd on
            chkconfig crond on
        elif [ ${VERSION} = 7 ];then
            systemctl start sshd.service network.service crond.service
            systemctl enable sshd.service network.service crond.service
            systemctl stop NetworkManager firewalld.service postfix.service
            systemctl disable NetworkManager firewalld.service postfix.service
        fi
    }
    
    set_network
    set_yum_repos
    set_public
    set_limits
    set_hostname
    set_services
    
    echo -e "33[31m*******************系统初始化完毕,将在20s后重启!!!*******************33[0m"
    sleep 20s && reboot
    
    



    未完待续......

  • 相关阅读:
    工厂方法模式
    命名空间的规划
    Download Manager
    Intent(二)
    Intent (一)
    Fragment (一)
    修改环境变量需不需要重启电脑
    Spring mvc和SSH如何取舍?
    ORA-01795: 列表中的最大表达式数为1000的解决方法详解
    apache与tomcate的区别
  • 原文地址:https://www.cnblogs.com/ccbloom/p/11426852.html
Copyright © 2011-2022 走看看