马哥教育网络班21期-第九周课程练习

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

#!/bin/bash
m=0
n=0
for i in `awk -F: '{print $NF}' /etc/passwd`
do
  if [[ "$i" = "/usr/sbin/nologin" ]];then
      let m+=1
  else
      let n+=1
  fi
done
echo "the shell is nologin :$m"
echo "the other is :$n"

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

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

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

#!/bin/bash
echo "please input a dev file:" 
read DEV
ls -l /dev|grep $DEV &> /dev/null
if [ $? -eq 0 ];then
  fdisk -l /dev/$DEV
else
  exit 100
fi

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

#!/bin/bash
case $1 in
quit)
    echo "exit this script"
    exit 0
    ;;
yes)
    echo "continue..."
    ;;
*)
   exit 127
    ;;
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
echo "please select one opthion in (gzip/bzip2/xz):"
read OPTION
if [ ! -d /backups/ ];then
    mkdir /backups
fi
case $OPTION in 
gzip)
    tar -czvf /backups/etc-`date +%Y%m%d`.tar.gz /etc/
    ;;
bzip2)
    tar -cjvf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc/
    ;;
xz)
    tar cvf /backups/etc-`date +%Y%m%d`.tar /etc/
    xz -z /backups/etc-`date +%Y%m%d`.tar
    ;;
*)
    exit 127
    ;;
esac

  
6、写一个脚本,接受一个路径参数:
   (1) 如果为普通文件,则说明其可被正常访问;
   (2) 如果是目录文件,则说明可对其使用cd命令;
   (3) 如果为符号链接文件,则说明是个访问路径;
   (4) 其它为无法判断;

#!/bin/bash
echo "please input a path"
read PATH
if [ -d $PATH ];then
   echo "This is a directory.You can apply the 'cd' on it."
elif [ -f $PATH ];then
   echo "This a regular file.You can access it normally."
elif [ -L $PATH ];then
   echo "This is a path to others"
else
   echo "Sorry,I can't make it"
fi

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

 #!/bin/bash
HOSTNAME=`hostname`
echo $HOSTNAME
if [[ "$HOSTNAME" = "localhost" ||"$HOSTNAME" = "none" ]];then
    hostname mail.magedu.com
else
    hostname
fi

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

#!/bin/bash
echo "please input the username:"
read p
  a=`grep ^"\b${p}\b" /etc/passwd|cut -d: -f3`
echo $a
if [ $a -eq 0 ];then
    echo "hello,administrater"
elif [ $a -gt 0 -a $a -lt 500 ];then
    echo "this is a system user"
else
    echo "this is a common user"
fi

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

#!/bin/bash
echo "please input the username:"
read p
  a=`grep ^"\b${p}\b" /etc/passwd|cut -d: -f3`
echo $a
  s=`grep ^"\b${p}\b" /etc/passwd|awk -F: '{print $NF}' |cut -d"/" -f3`
echo $s
if [ $a -ge 500 -a ${s:0-2} = "sh" ];then
    echo "a user can log system."
else
    echo "login denied"
fi

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

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

原创文章,作者:π,如若转载,请注明出处:http://www.178linux.com/45412

(0)
上一篇 2016-09-15 22:21
下一篇 2016-09-15 22:22

相关推荐

  • CentOS7下利用rsyslog+loganalyzer配置日志服务器及Linux和windows客户端配置

    随着机房内的服务器和网络设备增加,日志管理和查询就成了让系统管理员头疼的事。 系统管理员遇到的常见问题如下: 1、日常维护过程中不可能登录到每一台服务器和设备上去查看日志; 2、网络设备上的存储空间有限,不可能存储日期太长的日志,而系统出现问题又有可能是很久以前发生的某些操作造成的; 3、在某些非法入侵的情况下,入侵者一般都会清除本地日志…

    2017-03-15
  • 第三周作业

    1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。  2、取出最后登录到当前系统的用户的相关信息。  3、取出当前系统上被用户当作其默认shell的最多的那个shell。  4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/max…

    Linux干货 2016-12-21
  • vim编辑器的常见使用

    1、vim介绍 Vim是从 vi 发展出来的一个文本编辑器,处理文本文件功能强大。 三种主要模式: Vim打开文件,默认命令(Normal)模式,可以移动光标,剪切和粘贴。 按键i 进入插入(Insert)模式,用户可以编辑文本。 扩展(Extended)命令模式(或末行模式)用户:wq可保存退出,或者:q!强制退出。 Exc按键可退出当前模式。 2、文本操…

    Linux干货 2017-07-30
  • 网络互联参考模型(详解)

    网络互联参考模型 1. 什么是协议 为了使数据可以在网络上从源传递到目的地,网络上所有设备需要“讲”相同的“语言” 描述网络通信中“语言”规范的一组规则就是协议 例如:两个人交谈,必须使用相同的语言,如果你说汉语,他说阿拉伯语…… 数据通信协议的定义 决定数据的格式和传输的一组规则或者一组惯例 2. 协议分层 网络通信的过程很复杂: 数据以电子信号的形式穿越…

    Linux干货 2015-05-07
  • 编写服务脚本/root/bin/testsrv.sh和备份脚本/root/bin/copycmd.sh

    编写服务脚本/root/bin/testsrv.sh,完成如下要求 (1) 脚本可接受参数:start, stop, restart, status (2) 如果参数非此四者之一,提示使用格式后报错退出 (3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功” 考虑:如果事先已经启动过一次,该如何处理? (…

    Linux干货 2016-08-24
  • N28-第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 命令:cp、mv、rm 1.1 cp命令 用法: cp [OPTIONS]…[-T] SOURCE DEST cp SRC DEST而言,SRC是文件时 如果目标不存在: 新建DEST,并将SRC中内容填充至DEST中 如果目标存在: 如果DEST是文件:将SRC中的内容覆盖至DE…

    Linux干货 2017-12-15

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-19 17:39

    输入的时候可以直接用read -p ,1题不对