请选择 进入手机版 | 继续访问电脑版
搜索
查看: 217|回复: 2

[Linux] Shell经典脚本

[复制链接]
  • TA的每日心情
    郁闷
    2018-7-31 18:12
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2018-7-26 12:25:54 | 显示全部楼层 |阅读模式 <
    1、监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告。
    #!/bin/bash  
    #monitor available disk space  
    #提取本服务器的IP地址信息   
    IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`      
    SPACE=` df -hP | awk '{print int($5)}'`  
    if [ $SPACE -ge 90 ]  
    then  
      echo "$IP 服务器 磁盘空间 使用率已经超过90%,请及时处理。"|mail -s "$IP 服务器硬盘告警"   hntjb@163.com  
    fi  

    2、用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下。
    #!/bin/sh  
    FILENAME=  
    echo “Input file name:”  
    read FILENAME  
    if [ -c "$FILENAME" ]  
    then  
    cp $FILENAME /dev  
    fi

    3、设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。
    #!/bin/sh  
    i=1  
    groupadd class1  
    while [ $i -le 30 ]  
    do  
    if [ $i -le 9 ] ;then  
    USERNAME=stu0${i}  
    else  
    USERNAME=stu${i}  
    fi  
    useradd $USERNAME  
    mkdir /home/$USERNAME  
    chown -R $USERNAME /home/$USERNAME  
    chgrp -R class1 /home/$USERNAME  
    i=$(($i 1))  
    done


    4、编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。
    #!/bin/sh  
    i=1  
    while [ $i -le 50 ]  
    do  
    userdel -r stud${i}  
    i=$(($i 1 ))  
    done


    5、某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案。
    (1)在下午4 :50删除/abc目录下的全部子目录和全部文件;
    (2)从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
    (3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
    (4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc);
    (5)在早晨8:00前开机后启动。

    解决方案:
    (1)用vi创建编辑一个名为prgx的crontab文件;
    (2)prgx文件的内容:
    50 16 * * * rm -r /abc/*  
    0 8-18/1 * * * cut -f1 /xyz/x1 >;>; /backup/bak01.txt  
    50 17 * * * tar zcvf backup.tar.gz /data  
    55 17 * * * umount /dev/hdc
    (3)由超级用户登录,用crontab执行prgx文件中的内容:
    root@xxx:#crontab prgx;在每日早晨8:00之前开机后即可自动启动crontab。


    6、设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下。
    (1)编写shell程序fileback:
    #!/bin/sh  
    DIRNAME=`ls /root | grep bak`  
    if [ -z "$DIRNAME" ] ; then  
    mkdir /root/bak  
    cd /root/bak  
    fi  
    YY=`date %y`  
    MM=`date %m`  
    DD=`date %d`  
    BACKETC=$YY$MM$DD_etc.tar.gz  
    tar zcvf $BACKETC /etc  
    echo “fileback finished!”  

    (2)编写任务定时器:
    echo “0 0 1 * * /bin/sh /usr/bin/fileback” >; /root/etcbakcron  
    crontab /root/etcbakcron  
    或使用crontab -e 命令添加定时任务:  
    0 1 * * * /bin/sh /usr/bin/fileback   


    7、有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做?
    (1)第一种方法:
    用户应使用crontab -e 命令创建crontab文件。格式如下:  
    0 0 * * sun cp –r /user/backup /tmp

    (2)第二种方法:
    用户先在自己目录下新建文件file,文件内容如下:
    0 * * sun cp –r /user/backup /tmp
    然后执行 crontab file 使生效。


    8、设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
    #!/bin/sh  
    i=1  
    while [ i -le 50 ]  
    do  
    if [ -d /userdata ];then  
    mkdir -p /userdata/user$i  
    chmod 754 /userdata/user$i  
    echo “user$i”  
    let “i = i 1″ (或i=$(($i+1))  
    else  
    mkdir /userdata  
    mkdir -p /userdata/user$i  
    chmod 754 /userdata/user$i  
    echo “user$i”  
    let “i = i 1″ (或i=$(($i+1))  
    fi  
    done

    9、mysql备份实例,自动备份mysql,并删除30天前的备份文件
    #!/bin/sh  
    #auto backup mysql  
    #wugk  2012-07-14  
    #PATH DEFINE  

    BAKDIR=/data/backup/mysql/`date %Y-%m-%d`  
    MYSQLDB=www  
    MYSQLPW=backup  
    MYSQLUSR=backup  

    if[ $UID -ne 0 ];then  
    echo This script must use administrator or root user ,please exit!  
    sleep 2  
    exit 0  
    fi  

    if[ ! -d $BAKDIR ];then  
    mkdir -p $BAKDIR  
    else  
    echo This is $BAKDIR exists ,please exit ….  
    sleep 2  
    exit  
    fi  

    ###mysqldump backup mysql  

    /usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPW -d $MYSQLDB >/data/backup/mysql/`date %Y-%m-%d`/www_db.sql  

    cd $BAKDIR ; tar -czf  www_mysql_db.tar.gz *.sql  

    cd $BAKDIR ;find  . -name “*.sql” |xargs rm -rf[ $? -eq 0 ]&&echo “This `date %Y-%m-%d` RESIN BACKUP is SUCCESS”  

    cd /data/backup/mysql/ ;find . -mtime 30 |xargs rm -rf  


    10、自动安装Nginx脚本,采用case方式,选择方式,也可以根据实际需求改成自己想要的脚本。
    #!/bin/sh  
    ###nginx install shell  
    ###wugk 2012-07-14  
    ###PATH DEFINE  

    SOFT_PATH=/data/soft/  
    NGINX_FILE=nginx-1.2.0.tar.gz  
    DOWN_PATH=http://nginx.org/download/  

    if[ $UID -ne 0 ];then  
    echo This script must use administrator or root user ,please exit!  
    sleep 2  
    exit 0  
    fi  

    if[ ! -d $SOFT_PATH ];then  
    mkdir -p $SOFT_PATH  
    fi  

    download ()  
    {  
    cd $SOFT_PATH ;wget $DOWN_PATH/$NGINX_FILE  
    }  

    install ()  
    {  
    yum install pcre-devel -y  
    cd $SOFT_PATH ;tar xzf $NGINX_FILE ;cd nginx-1.2.0/ &&./configure –prefix=/usr/local/nginx/ –with-http_stub_status_module –with-http_ssl_module  
    [ $? -eq 0 ]&&make &&make install  
    }  

    start ()  
    {  
    lsof -i :80[ $? -ne 0 ]&&/usr/local/nginx/sbin/nginx  
    }  

    stop ()  
    {  
    ps -ef |grep nginx |grep -v grep |awk ‘{print $2}’|xargs kill -9  
    }  

    exit ()  
    {  
    echo $? ;exit  
    }  

    ###case menu #####  

    case $1 in  
    download )  
    download  
    ;;  

    install )  
    install  
    ;;  

    start )  
    start  
    ;;  
    stop )  
    stop  
    ;;  

    * )  

    echo “USAGE0 {download or install or start or stop}”  
    exit  
    esac  


    11、批量解压tar脚本,批量解压zip并且建立当前目录。
    #!/bin/sh  
    PATH1=/tmp/images  
    PATH2=/usr/www/images  
    for i in `ls ${PATH1}/*`  
    do  
    tar xvf  $i  -C $PATH2  
    done

    这个脚本是针对所有tar文件在一个目录,但是实际情况中,有可能在下级或者更深的目录,我们可以使用find查找
    #!/bin/sh  
    PATH1=/tmp/images  
    PATH2=/usr/www/images  
    for i in `find  $PATH1  -name  ”*.tar” `  
    do  
    tar xvf  $i  -C $PATH2  
    done   

    如何是zip文件,例如123189.zip 132342.zip 等等批量文件,默认unzip直接解压不带自身目录,意思是解压123189.zip完当前目录就是图片,不能创建123189目录下并解压,可以用shell脚本实现
    #!/bin/sh  
    PATH1=/tmp/images  
    PATH2=/usr/www/images  
    cd $PATH1  

    for i in `find  . -name  ”*.zip”|awk  -F.  {print $2} `  
    do  

    mkdir -p   PATH2$i  

    unzip -o  .$i.zip  -d   PATH2$i  
    done  

    12、ssh批量上传脚本
    (1)要上传的文件列表放到一个test文件中
    root@ubuntu:/home/zhangy# cat test   
    /home/zhangy/test/aaa   
    /home/zhangy/test/nginx.conf   
    /home/zhangy/test/test.sql   
    /home/zhangy/test/pa.txt   
    /home/zhangy/test/password
    上面就要上传的文件。

    (2)批量上传的脚本
    root@ubuntu:/home/zhangy# vim file_upload.sh
    #!/bin/sh  

    DATE=`date %Y_%m_%d_%H`  

    if [ $1 ]  
    then  
      for file in $(sed '/^$/d' $1)     //去掉空行  
      do  
        if [ -f $file ]                 //普通文件  
        then  
          res=`scp $file $2file`      //上传文件  
          if [ -z $res ]                //上传成功  
          then  
            echo $file >> ${DATE}_upload.log   //上传成功的日志  
          fi  
        elif [ -d $file ]              //目录  
        then  
          res=`scp -r $file $2file`  
          if [ -z $res ]  
          then  
            echo $file >> ${DATE}_upload.log  
          fi  
        fi  
      done  
    else  
      echo "no file" >> ${DATE}_error.log  
    fi

    (3)上传的格式
    ./file_upload.sh test 192.168.1.13
    test是上传列表文件,192.168.1.13文件要传到的地方。


    13、在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件
    [root@cjy linux-20]# vim 2.sh  
    #!/bin/bash  

    WORK_DIR=/oldboy/  

    create(){  

        i=1  
        while (($i<11))  
        do  
            cd $WORK_DIR && touch `tr -dc "a-z"</dev/urandom |head -c 10`_oldboy.html  
            i=$(($i 1))  
        done  
    }  

    check(){  
        if [ -d $WORK_DIR ];  
        then  
            create  
        else  
            mkdir $WORK_DIR  
            create  
        fi  
    }  

    check  

    14、将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写。
    [root@cjy linux-20]# vim 3_1.sh  
    #!/bin/bash  

    change_name(){  
    DIR=/oldboy  
    FILE=`ls /oldboy`  
    GIRL=_oldgirl.HTML  

    for i in $FILE  
    do  
       c=`echo $i | cut -c 1-10`  
       mv $DIR/$c* $DIR/$c$GIRL  
    done  
    }  

    change_name  


    15、批量创建和删除10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。
    [root@cjy linux-20]# vim 4.sh  
    #!/bin/bash  

    USER=oldboy  
    create_user(){  

        for i in {01..10}  
        do  
             RPASSWD=$(tr -dc [:alpha:] < /dev/urandom |head -c 8)  
             useradd $USER$i  
             echo $RPASSWD|passwd $USER$i --stdin  
             echo $USER$i----$RPASSWD >> /oldboy/userpasswd.txt  
        done  
    }  

    del_user(){  

        for j in {01..10}  
        do  
            userdel $USER$j  
            rm -rf /home/$USER$j  
        done  
    }  

    case $1 in  
        create)  
            create_user  
        ;;  
        del)  
            del_user  
        ;;  
        *)  
            echo "Usagelease use $0 create or $0 del."  
            echo "####################################"  
            echo "create: create user $USER 01-10 and give it random passwd."  
            echo "del: delete $USER 01-10 and /home/$USER 01-10 directory. "  
        ;;  
        esac


    16、写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些
    [root@cjy linux-20]# vim 5.sh  
    #!/bin/bash  

    tmp_fifofile=/tmp/$$.fifo  
    mkfifo $tmp_fifofile  
    exec 6<> $tmp_fifofile  
    rm -rf $tmp_fifofile  

    thread=254  
    for ((i=0;i<$thread;i ))  
    do  
        echo >&6  
    done  

    for ((i=2;i<255;i ))  
    do  
    read -u6  
        {  
            ip=192.168.0.  
            ping $ip$i -c 1 >/dev/null && echo $ip$i:live || echo $ip$i:dead >>123  
                   echo >&6  
        }&  
    done  
    wait  
    exec 6>&-  

    exit 0  

    该用户从未签到

    发表于 2019-1-6 09:59:42 | 显示全部楼层
    天龙sf架设|奇迹Musf架设|魔兽sf架设|魔域sf架设|墨香sf架设
    天堂2sf架设|传奇3sf架设|英雄王座sf架设|千年sf架设|征途sf架设
    新魔界sf架设|骑士sf架设|烈焰sf架设|破天sf架设|决战sf架设
    美丽世界sf架设|乱勇OLsf架设|倚天2sf架设|完美世界sf架设|征服sf架设
    天堂sf架设|传世sf架设|真封神sf架设|劲舞团sf架设|天上碑sf架设
    永恒之塔sf架设|仙境ROsf架设|诛仙sf架设|神泣sf架设|石器sf架设
    冒险岛sf架设|惊天动地sf架设|热血江湖sf架设|问道sf架设|密传sf架设
    火线任务(Heat Project)sf架设|飞飞OLsf架设|洛汗sf架设|天之炼狱sf架设
    丝路传说sf架设|大话西游sf架设|蜀门sf架设|机战sf架设|剑侠情缘sf架设
    绝对女神sf架设|传说OLsf架设|刀剑sf架设|弹弹堂sf架设|科洛斯sf架设
    魔力宝贝sf架设|武林外传sf架设|网页游戏sf架设|页游sf架设|希望OLsf架设
    成吉思汗sf架设|剑侠世界sf架设|全民奇迹sf架设|挑战OLsf架设
    红月sf架设|十二之天(江湖OL)sf架设|倚天sf架设|dnfsf架设
    我们的团队:第一时间技术部设计与程序每天受理新加入的客户业务.
    我们的客服中心给您的承诺是:
    您的日常业务最快一小时内完成,其它类型的工作最短时间完成.
    聆听客户的声音,营造温暖的港湾.
    我们为您提供是1年365天24小时的服务,您可以任何时间拨打我们的电话.
    努力做到让我们没有投诉-64uv.com给您带来诚信网络平台.
    服务器租用-开区模版-私服套餐-版本挑选-广告代理
    官方网站64uv.com
    客服咨询QQ1292124634(企鹅扣扣)
    Email:1292124634@qq.com
    64uv.com免费版本下载(已修复不能下载问题):
    64uv.com/soft/index.html
    奇迹Musf一条龙服务端_64uv.com 魔兽私服一条龙服务端_64uv.com 倚天2开服一条龙制作_64uv.com












    石器私服一条龙制作 天堂2sf一条龙开服 仙境RO开区一条龙服务端
    回复

    使用道具 举报

    该用户从未签到

    发表于 2019-2-28 10:29:39 | 显示全部楼层
    不错!值得学习,楼主继续












    抖音点赞
    刷赞软件
    免费刷赞
    代刷网
    qq代刷网
    QQ代刷网
    刷赞
    代刷网
    名片赞
    刷赞网站
    qq名片赞
    刷赞平台
    QQ代刷网
    代刷
    卡盟平台
    刷qq名片赞
    qq说说刷赞
    qq刷赞软件
    qq刷赞
    刷赞平台
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    艾特资源分享

    艾特资源分享,一个分享各种资源的部落,提供优质互联网资源!

    扫描并关注

    联系我们

    • QQ:2129911300
    • Email:gly@it155.cn

    申请友链|Archiver|手机版|艾特资源分享 ( 粤ICP备18077912号 )

    Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表