第九周 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
下一篇 2016-09-26

相关推荐

  • bash脚本编程实例

    bash脚本编程实例 1.写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态 在线的主机使用绿色显示 不在线的主机使用红色显示 #!/bin/bash for i in {1..254};do if /bin/ping -W 1 -c 1 172.16.250.${i} >> /dev/…

    Linux干货 2017-08-20
  • Hello word!

    初识linux

    2018-03-26
  • linux用户和组管理

    linux系统是一个多用户的系统,每个账号都干什么用,你必须了如指掌。 【Linux用户】 即UID分为两大类:管理员 UID:0                               普通用户 UID:…

    Linux干货 2016-08-05
  • linux 病毒 sfewfesfs

    由于昨天在内网服务器A不小心rm -fr / ,导致服务器A完蛋,重装系统后,不知道啥原因,局域网瘫痪不能上网,最后发现内网服务器A的一个进程sfewfesfs cpu 300%。路由器被网络阻塞啦。 于是百度这个病毒:都说该病毒很变态。第一次中linux病毒,幸亏是内网,感觉比较爽。(总结网络内容,引以为戒) 1、病毒现象 服务器不停向外网发送数据包,占网…

    Linux干货 2015-04-03
  • Linux系统操作练习-2

    1、显示当前系统上root、fedora或user1用户的默认shell: 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(): 3、使用echo命令输出一个绝对路径,使用grep取出基名;扩展:取出路径名: 扩展: 4、找出ifconfig命令结果中的1-255之间的数字: 5、挑战题:写一个…

    2017-11-25
  • N_28文件类管理命令

    1.linux文件管理类命令有:mkdir ,rmdir,cp ,mv,rm,ls,vi,cat ,cut,sort,wc等 mkdir –make directories  (创建目录) 用法 :mkdir [OPTION]… DIRECTORY… -P  按需要创建目录的父目录; -v  显示创建的详细过程; -m M…

    2017-12-09

评论列表(1条)

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

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