马哥教育网络班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 09:11
下一篇 2016-10-24 09:11

相关推荐

  • 高级文件系统的管理

    一、迁移分区 分区 /dev/sda6 注意同步问题  创建分区,把原先家目录下的文件拷贝到新挂载的文件中 mkfs.ext4 /dev/sda6  mkdir /mnt/home mount /dev/sda6 /mnt/home cp -a /home/*  /mnt/home   init 1 切换单用户模式,把…

    Linux干货 2016-11-27
  • Linux发展史

    一、简单的说: 一个名叫Linus Torvalds的芬兰大学生想要了解Intel的新CPU386。他认为比较好的学习方法是自己编写一个操作系统的内核。出于这种目的,加上他对当时Unix 变种版本(即Minix)对于80386类机器的脆弱支持十分不满,他决定要开发出一个全功能的、支持POSIX标准的、类Unix的操作系统内核,该系统吸收了BSD和S…

    Linux干货 2016-10-20
  • N22第二周作业

    1.Linux上文件管理类命令有哪些,其常用的使用方法及其相关示列演示。  常用文件管理类命令有:cp, mv ,rm. (1)cp:copy (2)mv:move (3) rm:remove   2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示 3、请使用命令行展开功能来完成以下练习:   &nb…

    Linux干货 2016-08-22
  • 2016/10/14作业

    操作类: 1、设置自己的终端提示符,要求终端登陆时:     a> 需要带颜色      b> 需要显示当前执行到了第几条命令      c> 显示当前登录终端,主机名和当前时间 首先我们要了解一个环境…

    Linux干货 2016-10-19
  • Leetcode 编程训练

    Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google、微软、Facebook、Amazon之类的这些公司,基本上是应试教育的功利主义。 我做这些题目的不是为了要去应聘这些公司,而是为了锻炼一下自己的算法和编程能力。因为我开始工作的时候基本没有这样的训练算法和编程的网站,除了…

    Linux干货 2016-08-15
  • Linux下用户属性的更改

      Linux下更改用户的属性一般使用usermod命令   基本格式如下:            Usermod[options]  login      [options]中具体参数如下:    -u  U…

    Linux干货 2017-05-30

评论列表(1条)

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

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