linux shell脚本,入门到实战详解(三)

四、shell 编程实战 案例

(点击进入Linux实战课程↑↑)

4.1 系统备份脚本—案例

Tar工具全备、增量备份网站,Shell脚本实现自动打包备份:

 #!/bin/bash
    #Auto Backup Linux System Files
    #by author rivers on 2021-09-28

  SOURCE_DIR=(
        $*
    )
    TARGET_DIR=/data/backup/
    YEAR=`date +%Y`
    MONTH=`date +%m`
    DAY=`date +%d`
    WEEK=`date +%u`
    A_NAME=`date +%H%M`
    FILES=system_backup.tgz
    CODE=$?
    if
        [ -z "$*" ];then
        echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n--------------------------------------------\n\nUsage: { $0 /boot /etc}\033[0m"
        exit
    fi
    #Determine Whether the Target Directory Exists
    if
        [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then
        mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY
        echo -e "\033[32mThe $TARGET_DIR Created Successfully !\033[0m"
    fi
    #EXEC Full_Backup Function Command
    Full_Backup()
    {
    if
        [ "$WEEK" -eq "7" ];then
        rm -rf $TARGET_DIR/snapshot
        cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]}
        [ "$CODE" == "0" ]&&echo -e  "--------------------------------------------\n\033[32mThese Full_Backup System Files Backup Successfully !\033[0m"
    fi
    }
    #Perform incremental BACKUP Function Command
    Add_Backup()
    {
       if
            [ $WEEK -ne "7" ];then
            cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $A_NAME$FILES ${SOURCE_DIR[@]}
            [ "$CODE" == "0" ]&&echo -e  "-----------------------------------------\n\033[32mThese Add_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup Successfully !\033[0m"
       fi
    }
    sleep 3 
    Full_Backup;Add_Backup

4.2 收集系统信息—案例

Shell脚本实现服务器信息自动收集:

 cat <<EOF
    ++++++++++++++++++++++++++++++++++++++++++++++
    ++++++++Welcome to use system Collect+++++++++
    ++++++++++++++++++++++++++++++++++++++++++++++
    EOF
    ip_info=`ifconfig |grep "Bcast"|tail -1 |awk '{print $2}'|cut -d: -f 2`
    cpu_info1=`cat /proc/cpuinfo |grep 'model name'|tail -1 |awk -F: '{print $2}'|sed 's/^ //g'|awk '{print $1,$3,$4,$NF}'`
    cpu_info2=`cat /proc/cpuinfo |grep "physical id"|sort |uniq -c|wc -l`
    serv_info=`hostname |tail -1`
    disk_info=`fdisk -l|grep "Disk"|grep -v "identifier"|awk '{print $2,$3,$4}'|sed 's/,//g'`
    mem_info=`free -m |grep "Mem"|awk '{print "Total",$1,$2"M"}'`
    load_info=`uptime |awk '{print "Current Load: "$(NF-2)}'|sed 's/\,//g'`
    mark_info='BeiJing_IDC'
    echo -e "\033[32m-------------------------------------------\033[1m"
    echo IPADDR:${ip_info}
    echo HOSTNAME:$serv_info
    echo CPU_INFO:${cpu_info1} X${cpu_info2}
    echo DISK_INFO:$disk_info
    echo MEM_INFO:$mem_info
    echo LOAD_INFO:$load_info
    echo -e "\033[32m-------------------------------------------\033[0m"
    echo -e -n "\033[36mYou want to write the data to the databases? \033[1m" ;read ensure


    if      [ "$ensure" == "yes" -o "$ensure" == "y" -o "$ensure" == "Y" ];then
            echo "--------------------------------------------"
            echo -e  '\033[31mmysql -uaudit -p123456 -D audit -e ''' "insert into audit_system values('','${ip_info}','$serv_info','${
    cpu_info1} X${cpu_info2}','$disk_info','$mem_info','$load_info','$mark_info')" ''' \033[0m '
            mysql -uroot -p123456 -D test -e "insert into audit_system values('','${ip_info}','$serv_info','${cpu_info1} X${cpu_info2}
    ','$disk_info','$mem_info','$load_info','$mark_info')"
    else
            echo "Please wait,exit......"
            exit
    fi

4.3 一键部署lnmp架构—案例

批量部署lnmp 架构:

[root@web-server01~/script]# vim lnmp.sh 
    #!/bin/bash
    #install lnmp
    #by author rivers on 2021-9-28

    # nginx 环境准备
    Nginx_url=https://nginx.org/download/nginx-1.20.1.tar.gz
    Nginx_prefix=/usr/local/nginx

    # mysql 环境准备
    Mysql_version=mysql-5.5.20.tar.gz
    Mysql_dir=mysql-5.5.20
    Mysql_url=https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.20.tar.gz
    Mysql_prefix=/usr/local/mysql/

    # php 环境准备
    Php_version=php-7.2.10.tar.gz
    Php_prefix=/usr/local/php-7.2.10/


    function nginx_install(){

   if [[ "$1" -eq "1" ]];then
            if [ $? -eq 0 ];then
                    make && make install
            fi

    fi
    }



    function mysql_install(){
    if [[ "$1" -eq "2" ]];then
    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
    -DMYSQL_DATADIR=/data/mysql \
    -DSYSCONFDIR=/etc \
    -DMYSQL_USER=mysql \
    -DMYSQL_TCP_PORT=3306 \
    -DWITH_XTRADB_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_READLINE=1 \
    -DENABLED_LOCAL_INFILE=1 \
    -DWITH_EXTRA_CHARSETS=1 \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DEXTRA_CHARSETS=all \
                    echo -e "\033[32mThe $Mysql_dir Server Install Success !\033[0m"
            else
                    echo -e "\033[32mThe $Mysql_dir Make or Make install ERROR,Please Check......"
                    exit 0
    fi
    /bin/cp support-files/my-small.cnf  /etc/my.cnf
    /bin/cp support-files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    fi
    }


    function php_install(){
    if [[ "$1" -eq "3" ]];then
            if [ $? -eq 0 ];then
                    make ZEND_EXTRA_LIBS='-liconv' && make install
    if [[ "$1" -eq "3" ]];then
     wget $Php_url && tar xf $Php_version && cd $Php_dir && yum install   bxml2* bzip2* libcurl*  libjpeg* libpng* freetype* gmp* libm
    crypt* readline* libxslt* -y && ./configure --prefix=$Php_prefix --disable-fileinfo --enable-fpm --with-config-file-path=/etc --wi
      -config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc --with-jpeg-dir --w
    ith-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --enable-
    mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=/var/lib/mysql/mysql.sock --without-pear --enable-bcmath
            if [ $? -eq 0 ];then
                    make ZEND_EXTRA_LIBS='-liconv' && make install
                    echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32mThe $Php_version Server Install Success !\033[0m"
            else
                    echo -e "\033[32mThe $Php_version Make or Make install ERROR,Please Check......"
                    exit 0
            fi
    fi
    }


    PS3="Please enter you select install menu:"
    select i in nginx mysql php quit
    do
    "lnmp.sh" 113L, 3516C written                                                                                   
    [root@web-server01~/script]# vim lnmp.sh 
    chkconfig --add mysqld
    chkconfig mysqld on
    fi
    }


    function php_install(){
    if [[ "$1" -eq "3" ]];then
            if [ $? -eq 0 ];then
                    make ZEND_EXTRA_LIBS='-liconv' && make install
                    echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32mThe $Php_version Server Install Success !\033[0m"
            else
                    echo -e "\033[32mThe $Php_version Make or Make install ERROR,Please Check......"
                    exit 0
            fi
    fi
    }


    PS3="Please enter you select install menu:"
    select i in nginx mysql php quit
    do

    case $i in
            nginx)
            nginx_install 1
            ;;
            mysql)
            mysql_install 2
            ;;
            php)
            php_install 3
            ;;
            quit)
            exit
    esac
    done

推荐阅读

>>>新手必备-Linux入门之云计算是什么

>>>红帽认证入门-Linux系统介绍及企业版本选型

>>>新手必备-Linux系统安装配置+Xshell远程连接

>>>Linux常用命令行合集之绝对路径和相对路径

>>>软连接与硬连接

运维界升职加薪必备的云计算技术,你学了吗?

学完高级运维云计算课程之后,你可以:

  • 跨越90%企业的招聘硬门槛
  • 增加70%就业机会
  • 拿下BAT全国TOP100大厂敲门砖
  • 体系化得到运维技术硬实力
  • 技术大佬年薪可达30w+
Linux Shell高级技巧实战总结 一、将输入信息转换为大写字符后再进行条件判断 二、为调试信息设置输出级别 、判断参数是否为数字 四、判断整数变量的奇偶性 五、将Shell命令赋值给指定变量,以保证脚本的移植性 六、获取当前时间距纪元时间(1970年1月1日)所经过的天数 七、非直接引用变量 八、在循环中使用管道的技巧 九、自链接脚本 十、Here文档的使用技巧 十一、获取进程的运行时长(单位: 分钟) 十二、模拟简单的top命令 十、格式化输出指定用户的当前运行进程 十四、用脚本完成which命令的基本功能 十五、验证输入信息是否合法 十六、整数验证 十七、判断指定的年份是否为闰年 十八、将单列显示转换为多列显示 十九、将文件的输出格式化为指定的宽度 二十、监控指定目录下磁盘使用空间过大的用户 二十一、编写一个更具可读性的df命令输出脚本 二十二、编写一个用于添加新用户的脚本 二十、kill指定用户或指定终端的用户进程 二十四、判断用户输入(是/否)的便捷方法 二十五、通过FTP下载指定的文件 二十六、文件锁定 二十七、用小文件覆盖整个磁盘 二十八、统计当前系统中不同运行状态的进程数量 二十九、浮点数验证 十、统计英文文章中每个单词出现的频率 Linux Shell经典实例解析--Oracle启动脚本(上) Linux Shell经典实例解析--Oracle启动脚本(下)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值