美文网首页日常杂记
简书初体验之作业习题

简书初体验之作业习题

作者: 还没帮马里奥再闯一关 | 来源:发表于2020-11-21 23:10 被阅读0次

    作业

    练习:

    1、编写脚本 systeminfo.sh,显示当前主机系统信息,包括:主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小

    #!/bin/bash
    set -ue
    . /date/sh/color.sh
    $GREEN'*******************************************************************'$END
    $GREEN HOSTNAME:`hostname`$END
    $GREEN IP:`ifconfig ens33|egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"|head -1`$END
    $GREEN OS:`cat /etc/centos-release`
    $GREEN kernet:`uname -a`
    $GREEN CPU:`cat /proc/cpuinfo |egrep -o "model name.*"|head -1|cut -d: -f2`
    $GREEN Free:`free -h|egrep -o "Mem.*"|tr -s " " :|cut -d: -f2 `
    $GREEN Disk Free:`lsblk|egrep sda|head -1|tr -s " " :|cut -d: -f5`                   $GREEN'*******************************************************************'$END
    

    2、编写脚本 backup.sh,可实现每日将/etc/目录备份到/backup/etcYYYY-mm-dd中

    #!/bin/bash
    set -ue
    DES=/backup/etc_`date +%F-%T`/
    SOU=/etc/
    cp -av $SOU $DES > /dev/null    #'cp -av' 递归复制,并保留文件的所有属性,且显示复制过程
    

    3、编写脚本 disk.sh,显示当前硬盘分区中空间利用率最大的值

    df -h |egrep  "^/dev/"|sort -nr|tr -s " " :|cut -d: -f1,5|head -1
    

    4、编写脚本 links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

    netstat -nat|tr -s " " \| |cut -d\| -f5|egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -nr|uniq -c|head -1
    

    练习

    1、编写脚本 argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

    $#: #传入脚本的参数个数;
    $0:  #脚本自身的名称;  
    $1:  #传入脚本的第一个参数;
    $2:  #传入脚本的第二个参数;
    $@:  #传入脚本的所有参数;
    $*: #传入脚本的所有参数;
    $$:  #脚本执行的进程id;
    $?:  #上一条命令执行后的状态,结果为0表示执行正常,结果为1表示执行异常;
    #其中$@与$*正常情况下一样,当在脚本中将$*加上双引号作为“$*”引用时,此时将输入的所有参数当做一个整体字符串对待。比如输入参数有a b c三个参数,则“$*”表示“a b c”一个字符串。
    
    #!/bin/bash
    if [ $# -lt 1 ];then    # $#表示这个脚本的参数个数
            echo "至少应该给一个参数"
            exit
    elif [ -f $1 ];then                                                                                                                                                       
            grep  "^$" $1 | wc -l
    
    else    # else 表示如果以上条件都为假的时候,执行下面的命令
            echo "请输入有效文件路径"
            exit
    

    2、编写脚本 hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”3、编写脚本 checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

    #!/bin/bash
    . /date/sh/color.sh
    read -p "请输入要测试的IPV4地址:" IP
    if [[ ! $IP =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]];then
        echo -e "$RED请输入正确的IP地址$END"
        exit 1
    fi
    if ping -c1 -w2 $IP &> /dev/null;then
        $GREEN"IP address is UP"$END
        else echo -e $RED"IP address IS Down"$END
    fi
    
    #!/bin/bash
    set -ue
    . /date/sh/color.sh
    SPACE=`df|egrep -o [0-9]+%|tr -d %|sort -nr|head -1`
    INODE=`df -i|egrep -o [0-9]+%|tr -d %|sort -nr|head -1` #[0-9]+  表示0-9的数字组合至少要出现1个以上
    WARNING=0
    [ "$SPACE" -gt $WARNING -o $INODE -gt $WARNING ] && echo "Disk_used:$SPACE, Inode_used:$INODE, will be full"|mail -s "disk warning" root 
    You have new mail in /var/spool/mail/root
    

    4、编写脚本 per.sh,判断当前用户对指定参数文件,是否不可读并且不可写

    #!/bin/bash                                                                                                                   
    FILE=$1
    [ ! -r $FILE -a ! -w $FILE ] && echo "不可读且不可写"
    

    5、编写脚本 excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件

    #!/bin/bash
    set -ue
    read -p "请输入参数文件:" FILE
    [ -f $FILE ] && [[ "$FILE" == *.sh ]] && chmod +x $FILE || echo "这不是脚本文件"
    

    6、编写脚本 nologin.sh和 login.sh,实现禁止和允许普通用户登录系统

    echo "System maintenance, no landing" > nologin #在/etc 执行该命令可以禁止普通用户登陆,但是root不受影响
    

    练习

    1、让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin

    vim ~/.bash_profile
    

    2、用户 root 登录时,将命令指示符变成红色,并自动启用如下别名: rm=‘rm –i’

     编写root对应账户下得.bashrc
    

    3、任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous!”

    vim /etc/issue  #输入你想显示的内容
    

    4、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等

    
    

    练习

    1、编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之。并设置初始密码为123456,显示添加的用户的id号等信息,在此新用户第一次登录时,会提示用户立即改密码,如果没有参数,就提示:请输入用户名

    #!/bin/bash
    read -p "please input Newusername:" NAME        
    if [ -z "$NAME" ];then
        echo "not empty"
        exit 1
    elif id $NAME &> /dev/null;then
        echo "User exist!"
    elif useradd -p abc123456 $NAME;then
        chage -d 0 $NAME
        echo "Create a new user:$NAME,UID:`id $NAME`"
    fi
    
    #!/bin/bash
    set -ue
    read -p "Please input username:" NAME
    if [ -z $NAME ];then
        echo "User name is empty"
        exit 1
    elif id $NAME &> /dev/null;then
        echo "user exist"
        exit 2
    elif useradd -p abc123456 $NAME;then
        echo "success"
    fi
    

    2、编写脚本 yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息

    知识点

    #[[ ]]用法,建议,当使用正则表达式或通配符使用,一般情况使用 [ ]
    ==左侧字符串是否和右侧的PATTERN相同
    注意:此表达式用于[[ ]]中,PATTERN为通配符
    =~左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
    注意: 此表达式用于[[ ]]中;扩展的正则表达式

    #!/bin/bash #编写脚本 yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息
    set -ue
    read -p "请输入yes or no:" ANSWER
    if [[ $ANSWER =~ ^[yY][Ee][Ss]$ ]];then
        echo "You input is: yes"
    elif [[ $ANSWER =~ ^[Nn][Oo] ]];then
        echo "You input is: no"
    else 
        echo "input erro"
    fi
    ----------------------------------------------
    #!/bin/bash
    read -p "Do you agree(yes/no)? " INPUT
    case $INPUT in
    [yY]|[Yy][Ee][Ss])
        echo "You input is YES"
       ;;
    [Nn]|[Nn][Oo])
        echo "You input is NO"
       ;;
    *)
        echo "Input fales,please input yes or no!"                 
    esac
    ----------------------------------------------
    #!/bin/bash
    read -p "Do you agree(yes/no)? " INPUT
    INPUT=`echo $INPUT | tr 'A-Z' 'a-z'`
    case $INPUT in
    y|yes)
          echo "You input is YES"
         ;;
    n|no)
          echo "You input is NO"
         ;;
    *)
          echo "Input fales,please input yes or no!"
    esac
    

    3、编写脚本 fifiletype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)4、编写脚本 checkint.sh,判断用户输入的参数是否为正整数

    #!/bin/bash
    set -ue
    read -p "Please enter the file path:" FILE_PATH
    [ -z $FILE_PATH ] && (echo "The file path is empty";exit 1)
    TYPE=`ls -l $FILE_PATH|cut -c 1`
    case $TYPE in
        -)
        echo "File type is general file"
        ;;
        b)
        echo "File type is block file"
        ;;
        d)
        echo "File type is directory file"
        ;;
        l)
        echo "File type is link file"
        ;;
        p)
        echo "File type is pipeline file"
        ;;
        s)
        echo "File type is socket file"
        ;;
        c)
        echo "File type is character file"
        ;;
    esac
    ---------------------------------------------------------------------------
    #判断一个数字是否为整数
    #!/bin/bash
    read -p "Please input a string:" STRING
    [ -z $STRING ] && { echo "Please input string";exit 1; }
    [[ $STRING =~ ^[0-9]+$ ]] || { echo "please input digit";exit 2; }
    if [ $STRING -gt 0 ];then
        echo "The digit is int"
    fi
    

    5、编写脚本 reset.sh,实现系统安装后的初始化环境,包括:1、别名 2、环境变量,如PS1等 3、安装常用软件包,如:tree 5、实现固定的IP的设置,6、vim的设置等

    
    

    相关文章

      网友评论

        本文标题:简书初体验之作业习题

        本文链接:https://www.haomeiwen.com/subject/basyiktx.html