第九周 N21 总有刁民想害朕

1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;

#!/bin/bash
nologinuser=$(awk -F : '$NF~/\/nologin$/ {print $7}' /etc/passwd | wc -l)
#awk -F: '{if($NF=="/sbin/nologin")print $7}' /etc/passwd | wc -l这个效果同nologinuser
loginuser=$(awk -F : '$NF~/\^/nologin$/ {print $7}' /etc/passwd | wc -l)
#awk -F: '{if($NF!="/sbin/nologin")print $7}' /etc/passwd | wc -l 这个效果同loginuser
echo $nologin
echo $loginuser

2、写一个脚本

    (1) 获取当前主机的主机名,保存于hostname变量中;

    (2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改为www.magedu.com;

    (3) 否则,则显示当前主机名;

#!/bin/bash
 hostname=`hostname`
 if [ "$hostname" != "localhost" -a "$hostname" != "" ];then
  hostname=`hostname www.magedu.com`
 fi
 echo `hostname`

 

 3、写一个脚本,完成如下功能

    (1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;

    (2) 如果存在,则显示此设备上的所有分区信息;

  #!/bin/bash
  read -p "input a devname like /dev/sda" devname
  if [ -e $devname ];then 
  fdisk -l $devname
  else echo "not match"
  fi

4、写一个脚本,完成如下功能

   脚本能够接受一个参数;

   (1) 如果参数1为quit,则显示退出脚本,并执行正常退出;

   (2) 如果参数1为yes,则显示继续执行脚本;

   (3) 否则,参数1为其它任意值,均执行非正常退出;

#!/bin/bash
      if [ $# -eq 0 ];then
      echo "give me a canshu"
      exit 19
      fi
      case $1 in 
      quit)
             echo "exit" && exit;;
       yes)
            echo "continue";;
       *)
       echo "exit 20" && exit 20  ;;
       esac

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) 其它任意值,则显示错误压缩工具,并执行非正常退出;

#!/bin/bash
      if [ $# -eq 0 ];then
      echo "give me a canshu"
      exit 19
      fi
   case $1 in
   gzip)
    tar -zcvf  /backups/etc-`date +%Y%m%d`.tar.gz /etc
    ;;
   bzip2)
    tar -jvf  /backups/etc-`date +%Y%m%d`.tar.bz2 /etc
    ;;
   xz)
    tar -Jvf  /backups/etc-`date +%Y%m%d`.tar.xz /etc
    ;;
   *)
     echo "SB"
     ;;
   esac

6、写一个脚本,接受一个路径参数:

   (1) 如果为普通文件,则说明其可被正常访问;

   (2) 如果是目录文件,则说明可对其使用cd命令;

   (3) 如果为符号链接文件,则说明是个访问路径;

   (4) 其它为无法判断;

#!/bin/bash
      if [ $# -eq 0 ];then
      echo "give me a canshu"
      exit 19
      fi
   if [ -f $1 ];then echo "file"
   else if [ -d $1 ];then echo "dir"
   else if [ -L $1 ];then echo "lnk"
   else echo "not known"
   fi

7、写一个脚本,取得当前主机的主机名,判断

   (1) 如果主机名为空或为localhost,或为"(none)",则将其命名为mail.magedu.com;

   (2) 否则,显示现有的主机名即可;

   #!/bin/bash
 hostname=`hostname`
 if [ "$hostname" != "localhost" -a "$hostname" != "" ];then
  hostname=`hostname mail.magedu.com`
 fi
 echo `hostname`

8、写一脚本,接受一个用户名为参数;

   (1) 如果用户的id号为0,则显示其为管理员;

   (2) 如果用户的id号大于0且小于500, 则显示其为系统用户;

   (3) 否则,则显示其为普通用户;

#!/bin/bash
    id $1
    if [ $? -eq 0]
    then num=grep '$1' /etc/passwd | cut -d:f3 
    else
    echo "give me  current id"
    fi
    if [  $num -eq 0 ];then 
    echo "root"
    else if [  $num -gt 0 -a $num -lt 500 ];then
    echo "system user" 
    else 
    echo "normal"
    fi

10、写一个脚本,传递一个用户名参数给脚本;

   (1) 如果用户的id号大于等于500,且其默认shell为以sh结尾的字符串,则显示“a user can log system.”类的字符串;

   (2) 否则,则显示无法登录系统;

 #!/bin/bash
read -p "name" uid
id ^$uid\>
if [ $? -eq 0 ];then
num = $(grep "^$uid\>" /etc/passwd | cut -d: -f3)
sh = $(grep "^$uid\>" /etc/passwd |cut -d: -f7 )
fi
if [ $num -gt 500 -a "$sh" == `grep "sh$" $sh`];then
echo " can login"
else
echo " not login"
fi

11、写一个脚本,完成如下任务 :

   (1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;

   (2) 复制目录时,才使用cp -r命令;

   (3) 复制文件时使用cp命令;

   (4) 复制链接文件时使用cp -d命令;

   (5) 余下的所有类型,使用cp -a命令;

#!/bin/bash
for i in `ls /var/log`;do
   if [ -d $i ];then
    cp -d /var/log/$i /tmp/test1;
   elif [ -f $i ];then
    cp  /var/log/$i /tmp/test2;
   elif [ -d $i ];then   
    cp -d /var/log/$i /tmp/test3;
   else
    cp -a /var/log/$i /tmp/test4;
   fi
done

原创文章,作者:N21-总有刁民想害朕,如若转载,请注明出处:http://www.178linux.com/47789

(0)
N21-总有刁民想害朕N21-总有刁民想害朕
上一篇 2016-09-26 07:43
下一篇 2016-09-26 07:43

相关推荐

  • 使用httpd反向代理模块实现tomcat负载均衡集群(下)

    上一篇讲解了http使用mod_http和mod_ajp代理模块实现tomcat负载均衡,下面我们来讲解使用http的mod_jk实现taomcat的负载均衡集群: 注意:http的mod_jk是第三方扩展模块,在新http版本中以不支持,在httpd 1.3和2.0效果较好 6、使用mod_jk实现tomcat负载均衡集群 6.1安装mod_jk [roo…

    Linux干货 2015-07-21
  • 学习标准I/O和管道的心得体会

    重定向、标准输出、标准输入、标准错误、管道的命令整理

    2017-11-20
  • DNS服务器类型及查询过程

    什么是DNS   DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。 DNS域名称   域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,…

    Linux干货 2017-02-08
  • sed简介及常见用法

    sed是一个文本流处理器,配合正则表达式用可以实现很多文本处理操作。 和grep一样,sed是一行一行的处理的。sed处理文本时,首先会将源文件复制一份到内存中,然后将文本一行一行拿到模式空间内进行操作,最后输出到标准输出,即屏幕上。 在模式空间中,每一行都会根据用户给的条件进行匹配,匹配到了进行编辑后输出,没有匹配到,直接输出到标准输出。sed除了模式空间…

    2018-01-04
  • 进程和计划任务

    一、进程概念    内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等 v Process:  运行中的程序的一个副本(文件),是被载入内存的一个指令集合,在内存中运行,系统指定一个内存空间和PID编号;进程ID(Process ID ,PID )号码被用来标记各个进程;存在生命周期 &nbsp…

    Linux干货 2016-11-27
  • 进程和计划任务

    一、知识整理 1、网络客户端工具:lftp,ftp,lftget,wget 子命令:get,mget,ls,help等 wget [opt] …[url] -q 静默模式 -c 断点续传 -O 保存位置 –limit-rates=  指定传输速率 登录ftp之后:lcd 在本机切换目录;get下载单个文件 !ls 查看本机文…

    Linux干货 2016-09-13

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-27 09:38

    2,7不对,你这样做只是一个赋值的操作,并没有改变主机名,还是少一些判断条件