zoukankan      html  css  js  c++  java
  • shell基础练习题

    shell 基础练习题

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

    #!/bin/bash
    echo -e "e[1;35mThis computer is hosted by: e[0m"
    hostname
    echo "    "
    echo -e  "e[1;35mMy ip addr is:e[0m"
    ifconfig  | sed -n '2p'|sed -r  's@.*inet (.*) net.*@1@'
    echo "     "
    #
    echo -e  "e[1;35mMy OS version is:e[0m"
    cat /etc/centos-release
    
    echo "  "
    
    
    echo -e "e[1;35mMy CPU is: e[0m"
    lscpu
    
    echo "   "
    
    echo -e "e[1;35mMy memory is: e[0m"
    free -m
    echo " "
    
    echo -e "e[1;35mMy disk is: e[0m"
    lsblk | sed -n  '2p'
    

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

    #!/bin/bash
    echo -e "e[1;35mbackup ing.... e[0m"
    sleep 3
    cp -av  /etc/  /data/etc`date +%F`
    echo -e  "e[1;35mbackup is done e[0m"
    

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

    #!/bin/bash
    echo -e "e[1;35mThe biggst ratio of your disk's space is e[0m"
    df | grep "/dev/sd"  | tr -s " " %   | cut -d% -f5 | sort -nr |   head -n1
    
    

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



    5、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和

    
    #!/bin/bash
    [ $# -ne 2 ] && echo "Args num must be 2" && exit
    [[ ! "$1" =~ ^[0-9]+$ ]] && echo "$1 is not digital" && exit
    [[ ! "$2" =~ ^[0-9]+$ ]] && echo "$2 is not digital" && exit
    UID1="`head -n$1 /etc/passwd | cut -d: -f3 |tail -n1`"
    UID2="`head -n$2 /etc/passwd | cut -d: -f3 |tail -n1`"
    sumid=$[$UID1+$UID2]
    echo $sumid
    

    6、编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和

    #!/bin/bash
    echo -e "e[1;35mThe files's blankline is : e[0m"
    grep ^$ $1 $2 | wc -l
    

    7、编写脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

    #!/bin/bash
    echo -e "e[1;35mThe number of /etc /var /usr is : e[0m"
    a="`find /etc -maxdepth 1 |wc -l`"
    b="`find /usr -maxdepth 1 |wc -l`"
    c="`find /var -maxdepth 1 |wc -l`"
    sum=$[a+b+c]
    echo $sum
    


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

    #!/bin/bash
    [ $# -lt 1 ] && echo -e "e[1;33m至少应该有一个参数 e[0m"  && exit
    [ $# -ge 1 ] && grep ^$ $1 $2 $3 |wc -l
    

    9、编写脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

    10、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

    #!/bin/bash
    a="`df | grep "/dev/sd.*" | tr -s " " % |cut -d% -f5 | sort -nr | head -n1`"
    b="`df -i | grep "/dev/sd.*" | tr -s " " % |cut -d% -f5 | sort -nr | head -n1`"
    [ $a -ge 80 ] && echo -e "e[1;35mYour disk space is warmming!! e[0m"
    [ $b -ge 80 ] && echo -e "e[1;35mYour inode numbers is warmming!! e[0m"
    


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

    #!/bin/bash
    [ -r $1 -a -w $1 ] ||  echo -e "e[1;35m您对此文件无读写权限 e[0m"
    

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

    #!/bin/bash
    [[ $1 =~  .sh$   ]] && [[ -f $1 ]] || { echo -e "e[1;35m该文件非脚本文件 e[0m" ; exit;  }
    chmod +x $1
    echo -e "e[1;35m该文件已添加X权限 e[0m"
    

    13、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
    nologin.sh

    #!/bin/bash
    echo -e "e[1;35mYOU WILL OPEN NOLOGIN,PLEASE WAIT e[0m"
    [ -a /etc/nologin ] && exit  || touch /etc/nologin
    echo -e "e[1;35mdone!!!e[0m"
    

    login.sh

    #!/bin/bash
    [ -e /etc/nologin ] && `rm -f /etc/nologin` || echo -e "e[1;35mnow,you can login e[0m"
    


    14、让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin
    在 /etc/profile.d/env. sh 文件,重新添加PATH变量。

    PS1="[e[1;36m][u@h W]\$[e[0m]"
    PATH=/usr/local/apache/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    
    echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    

    15、用户root登录时,将命令指示符变成红色,并自动启用如下别名:
    rm=‘rm –i’
    cdnet=‘cd /etc/sysconfig/network-scripts/’
    editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
    editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33 ’ (如果系统是CentOS7)
    命令符红色:

    在/etc/profile.d/env.sh中定义
    PS1="[e[1;31m22][u@h W]\$[e[0m]"
    

    定义别名:

    在 ~/.bashrc中将放入以下命令:
    alias rm=‘rm –i’
    alias cdnet=‘cd /etc/sysconfig/network-scripts/’
    alias editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
    alias editnet=‘vim  /etc/sysconfig/network-scripts/ifcfg-eno16777736 或  ifcfg-ens33 ’ 
    

    3、任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous !”
    在/etc/profile.d/env.sh 中添加
    echo -e "e[1;31mHi,dangerous ! e[0m"

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

    17、编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等

    vim  /root/reset.sh
  • 相关阅读:
    struct 结构体解析(原)
    C++标准编程:虚函数与内联
    基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现
    直接用编译器按ctrl+F5运行和双击运行结果不一样
    驱动编译的时候注意编译工程选项
    驱动编译的时候注意编译工程选项
    'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
    'ddkbuild.cmd' 不是内部或外部命令,也不是可运行的程序
    NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
    NtOpenProcess被HOOK,跳回原函数地址后仍然无法看到进程
  • 原文地址:https://www.cnblogs.com/sstjustdoit/p/10049065.html
Copyright © 2011-2022 走看看