马哥教育网络班22期+第9周课程练习

1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;
    
      [root@test ~]# vim userlgin.sh 
      #!/bin/bash

      declare -i i=0
      declare -i j=0 
      while read line;do
              usershell=$(echo $line |cut -d: -f7)
              if [ "$usershell" == "/sbin/nologin" ];then
                      let i++
              else
                      let j++
              fi
      done </etc/passwd

      echo "the nologin user total:$i"
      echo "the not nologin user total:$j"
      root@test ~]# bash userlgin.sh 

2、写一个脚本
    (1) 获取当前主机的主机名,保存于hostname变量中;
    (2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改为www.magedu.com;
    (3) 否则,则显示当前主机名;

      [root@test tmp]# vim hostname2.sh
      #!/bin/bash

      hostname=`hostname`
      if [ "$hostname" == "localhost" ]; then
              hostname www.magedu.com
              hostname=`hostname`
              echo $hostname
      else
              echo $hostname
      fi
      [root@test tmp]# bash hostname2.sh

3、写一个脚本,完成如下功能
    (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;
    (2) 如果存在,则显示此设备上的所有分区信息;

      [root@test tmp]# vim disk.sh 
      #!/bin/bash

      fdisk -s $1 &> /dev/null

      if [ $? -eq 0 ];then
              fdisk -l $1
      else
              echo "$1 is not exist"
      fi
      [root@test tmp]# bash disk.sh /dev/sdb1

4、写一个脚本,完成如下功能
   脚本能够接受一个参数;
   (1) 如果参数1为quit,则显示退出脚本,并执行正常退出;
   (2) 如果参数1为yes,则显示继续执行脚本;
   (3) 否则,参数1为其它任意值,均执行非正常退出;

      [root@www tmp]# vim input2.sh   
      #!/bin/bash

      read -p "Please input yes or quit or other chars:" input
      case $input in
      quit)
              echo "safety exit"
              exit 0
              ;;
      yes)
              echo "continue"
              ;;
      *)
              echo "unsafety exit"
              ;;
      esac
      [root@www tmp]# bash input2.sh


5、写一个脚本,完成如下功能
   传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一;
   (1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.gz;
   (2) 如果参数1的值为bzip2,则使用tar和bzip2归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.bz2;
   (3) 如果参数1的值为xz,则使用tar和xz归档压缩/etc目录至/backups目录中,并命名为/backups/etc-20160613.tar.xz;
   (4) 其它任意值,则显示错误压缩工具,并执行非正常退出;

      [root@www tmp]# vim input2.sh  
      #!/bin/bash

      arg=$1

      case $arg in
      gzip)
              tar -zcf /backups/etc-20160613.tar.gz /etc
              ;;
      bzip2)
              tar -jcf /backups/etc-20160613.tar.bz2  /etc
              ;;
      xz)
              tar -Jcf /backups/etc-20160613.tar.xz   /etc
              ;;
      *)
              echo "compress tool error,please input gzip,bzip2 or xz"
              exit 1
              ;;
      esac
      [root@www tmp]# vim input2.sh
  
6、写一个脚本,接受一个路径参数:
   (1) 如果为普通文件,则说明其可被正常访问;
   (2) 如果是目录文件,则说明可对其使用cd命令;
   (3) 如果为符号链接文件,则说明是个访问路径;
   (4) 其它为无法判断;

      [root@www tmp]# vim filetype2.sh
      #!/bin/bash

      if [ $# -lt 1 ]; then
              echo "At least one word."
              exit 1
      fi

      if [ -f $1 ];then
              echo "You can access it."
      elif [ -L $1 ];then
              echo "it's a file path"
      elif [ -d $1 ];then
              echo "You can use command cd into the file."
      else
              echo "it's an unknow file"
      fi
      [root@www tmp]# bash filetype2.sh /etc

7、写一个脚本,取得当前主机的主机名,判断
   (1) 如果主机名为空或为localhost,或为"(none)",则将其命名为mail.magedu.com;
   (2) 否则,显示现有的主机名即可;

      [root@www tmp]# vim hostname3.sh
      #!/bin/bash

      hostname=`hostname`
      if [ -z "$hostname" -o "$hostname" == "localhost" -o "$hostname" == "(none)" ];
       then        hostname mail.magedu.com
              hostname=`hostname`
              echo $hostname
      else
              echo $hostname
      fi
      [root@www tmp]# bash -x hostname3.sh


8、写一脚本,接受一个用户名为参数;
   (1) 如果用户的id号为0,则显示其为管理员;
   (2) 如果用户的id号大于0且小于500, 则显示其为系统用户;
   (3) 否则,则显示其为普通用户;

      [root@www tmp]# vim userid.sh
      #!/bin/bash
      if [ $# -lt 1 ];then
              echo "Please input an username"
              exit 1
      fi
      id $1 &> /dev/null
      if [ $? -eq 0 ] ;then
              uid=`id -u $1`
              if [ $uid -eq 0 ];then
                      echo "This is an administrator user"
              elif [ $uid -gt 0 -a $uid -lt 500 ];then
                      echo "This is a system user"
              else
                      echo "This is a common user"
              fi
      else
              echo "$1 is not exist"
      fi
      [root@www tmp]# bash userid.sh


10、写一个脚本,传递一个用户名参数给脚本;
   (1) 如果用户的id号大于等于500,且其默认shell为以sh结尾的字符串,则显示“a user can log system.”类的字符串;
   (2) 否则,则显示无法登录系统;

      [root@mail tmp]# vim userlg.sh
      #!/bin/bash

      if [ $# -lt 1 ];then
              echo "Please input an username"
              exit 1
      fi
      id $1 &> /dev/null

      if [ $? -eq 0 ];then
              uid=`grep "^$1\>" /etc/passwd |cut -d: -f3`
              shell=`grep "^$1\>" /etc/passwd |cut -d: -f7|grep -o "sh$"`
              if [ $uid -eq 0 ];then
                      echo "the user is an administrator user"
              elif [  $uid -ge 500 -a "$shell" == "sh" ];then
                      echo "a user can log system"
              else
                      echo "the user can't log system"
              fi
      else
              echo "$1 is not exist"
      fi
      [root@mail tmp]# bash -x userlg.sh user1


11、写一个脚本,完成如下任务 :
   (1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;
   (2) 复制目录时,才使用cp -r命令;
   (3) 复制文件时使用cp命令;
   (4) 复制链接文件时使用cp -d命令;
   (5) 余下的所有类型,使用cp -a命令;

      [root@mail tmp]# vim  cpfile.sh 
      #!/bin/bash

      file=/var/log/*
      for i in $file;do
              if [ -f $i ];then
                      echo "$i is common file"
                      cp $i /tmp/test1-testn/
              elif [ -L $i ];then
                      echo "$i is link file"
                      cp -d $i /tmp/test1-testn/
              elif [ -d $i ];then
                      echo "$i is directory"
                      cp -r $i /tmp/test1-testn
              else
                      echo "$i is other file"
                      cp -a $i /tmp/test1-testn
              fi
      done
      [root@mail tmp]# bash cpfile.sh

原创文章,作者:N22_上海_长清,如若转载,请注明出处:http://www.178linux.com/53353

(0)
N22_上海_长清N22_上海_长清
上一篇 2016-10-24
下一篇 2016-10-24

相关推荐

  • 管理systemd

    管理systemd init(系统的第一个进程): CentOS 5: SysV initCentOS 6: UpstartCentOS 7: Systemd Systemd:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程 Systemd新特性: 系统引导时实现服务并行启动 按需启动守护进程 系统状态快照 自动化的…

    Linux干货 2016-09-22
  • N27_第二周作业

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关演示。  A、copy命令        a、 单元复制:cp [OPTION]… [-T] SOURCE DEST 1、  如果dest不存在:则事先创建此文件,并复制源文件的数据流至dest中; [root@localhost /]# ls -l /tmp total 0 [r…

    2017-09-07
  • 网络班N22期第一周博客作业

    一、计算机的组成及功能。  计算机是由硬件系统和软件系统两部分组成的。 1、硬件系统包含:    (1)、主板。又叫主机板(mainboard)、系统板(systemboard)或母板(motherboard),它安装在机箱内,是微机最基本的也是最重要的部件之一,主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有B…

    Linux干货 2016-08-15
  • gzip压缩算法

    gzip,zlib,以及图形格式png,使用的是同一个压缩算法deflate。我们通过对gzip源码的分析来对deflate压缩算法做一个详细的说明: 第一,gzip压缩算法基本原理的说明。 第二,gzip压缩算法实现方法的说明。 第三,gzip实现源码级的说明。 1. Gzip压缩算法的原理      &n…

    Linux干货 2015-07-30
  • 搭建最基础的DNS服务

    搭建一个简单的DNS为了更方便和清晰的了解DNS的作用,通过搭建一个简单的DNS服务来学习。 在搭建之前,先简单了解一下DNS的工作原理 客户端把访问的域名传递给DNS服务器a,如果有记录,则将IP传递给客户端 DNS服务器a没有记录,则以递归方式访问其他服务器。首先访问根域 根域将匹配的一级域名DNS服务器b地址传递给DNS服务器a DNS服务器a再去访问…

    Linux干货 2017-07-26
  • DNS详解

    概述     互联网访问绝大多数都是基于域名的访问,互联网访问的基础是基于IP来实现的,因此,需要有一种将域名解析成IP的机制,让用户在利用域名访问时,自动将域名转换成为对应的IP,这就是DNS的功能,本章将介绍一些DNS相关的内容,具体分为:     1、DNS的基础概念 &n…

    Linux干货 2016-10-08

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-02 14:41

    完成的非常好,给出了详细操作步骤,脚本思路清晰,能把排版在完善一下就更完美了,加油!