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

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

#!/bin/bash
#
declare -i nologin_user;other_user
all_users=`awk -F':' '{print $1}' /etc/passwd`
for uesr_test in $all_users;do
  if [ /sbin/nologin == awk -F':' '{print $6}' ];then
    nologin_user++
  else
    other_user++
  fi
done
echo "The nologin user is $nologin_user"
echo "The other user is $other_user"

2、写一个脚本

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

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

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

#!/bin/bash
#
hostname=`hostname|cut -d'.' -f1`
[ $hostname == localhost] && hostname=www.magedu.com || echo $hostname

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

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

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

#!/bin/bash
#
if [ $# lt 1 ];then
  echo "At least one device path!"
  exit
else
  for i in $*;do
    if `fdisk -l $i &> /dev/null`;do
      fdisk -l $i | grep ^/dev
    else
      echo "The path $i does not exist!"
    fi
  done
fi

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

   脚本能够接受一个参数;

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

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

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

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "At lesat one argument."
    exit 0
fi
case $1 in
quit)
    echo "exit..."
    exit 0
    ;;
yes)
    echo "continue..."
    ;;
*)
    exit 1
    ;;
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 [ $# -lt 1 ];then
echo "At lesat one argument in gzip/bzip2/xz"
exit 0
fi
case $1 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 -cJvf /backups/etc-`date +%Y%m%d`.tar.xz /etc/
    ;;
*)
    echo "Error for tools..."
    exit 1
    ;;
esac

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

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

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

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

   (4) 其它为无法判断;

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "At lesat one PATH"
    exit 0
fi
if [ -f $1 ];then
    echo "Can be Access!"
elif [ -d $1 ];then
    echo "Can be cd!"
elif [ -L $1 ];then
    echo "A PATH to Access!"
else
    echo "unkown!"
    exit 1
fi

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

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

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

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

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

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

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

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

#!/bin/bash
if [ $# -ne 1 ];then
    echo "Input one user"
    exit 0
elif ! id $1 &> /dev/null;then
    echo "Not Exsit user"
    exit 0  
fi

uid01=`grep ^$1 /etc/passwd | awk -F':' '{print $3}'`

if [ $uid01 -eq 0 ];then
    echo "Administrater"
elif [ $uid01 -gt 0 -a $uid01 -lt 500 ];then
    echo "System user"
else
    echo "Common user"
fi

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

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

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

#!/bin/bash
if [ $# -ne 1 ];then
    echo "Input one user"
    exit 0
elif ! id $1 &> /dev/null;then
    echo "Not Exsit user"
    exit 0  
fi

uid01=`grep ^$1 /etc/passwd | awk -F':' '{print $3}'`
sh01=`grep ^$1 /etc/passwd | awk -F':' '{print $7}'`
sh02=${sh01: -2}
if [ $uid01 -eq 0 -a $sh02 == "sh" ];then
    echo "a user can log system."
else
    echo "can not log system."
fi

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

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

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

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

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

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

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

原创文章,作者:N21-孟然,如若转载,请注明出处:http://www.178linux.com/47477

(0)
N21-孟然N21-孟然
上一篇 2016-09-19
下一篇 2016-09-19

相关推荐

  • N26-肉肉-第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 常用文件管理命令有cp,mv,rm  cp :copy        -i:交互式复制,覆盖之前提醒用户确认;         &n…

    Linux干货 2017-01-03
  • N25-Bazinga-第二周作业

    1.Linux文件管理类命令 命令 功能 命令 功能 pwd 显示当前目录 ls 显示目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找字符串 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working&nbsp…

    Linux干货 2016-12-13
  • Apache通过mod_proxy模块连接Tomcat并使用Memcached+MSM做Tomcat会话保持

    一 实验目的 本实验使用Apache的mod_proxy模块连接Tomcat, Nginx在前端做负载均衡,并使用Memcahced+MSM的方式保持Tomcat的会话,实现会话共享。 二 实验拓扑 说明:为测试方便,Memcached与Tomcat安装在同一机器中,正式环境应该安装在不同机器中。 三 实验环境 主机 IP 安装组件 node1 192.16…

    Linux干货 2017-01-17
  • 第八周作业(网络、bash脚本)

    1-3,计算机网络基础博客已总结,简要补充 协议的分层 为了使那些比较复杂的网络协议更加简单化。ISO根据各通信协议的功能将网络体系分成七层。 在这个分层中,下层为上一层提供服务。上下层之间进行交互时所遵循的约定叫做“接口”。同层之间的交互所遵循的约定叫做“协议” 说的更形象一点,两个中国人打电话这个通信。就可以分为两层,同层之间的叫协议,我说汉语,你也说汉…

    Linux干货 2016-12-18
  • 2、文件通配符,文件创建、复制等操作

    1:bash特性之状态返回值 变量$?,用于保存命令执行成功与否的状态,0表示成功,1-255表示失败,以命令ls为例: 执行成功 [root@localhost ~]# ls /usr/     bin  etc  games &nbsp…

    Linux干货 2016-09-19
  • 图解LVM(逻辑卷管理)

    图解LVM 1 什么是LVM?为什么要使用LVM? lvm(Logical Volume Manager)逻辑卷管理,是一种更为灵活弹性的磁盘管理工具。 通过逻辑卷管理,能够解决传统磁盘管理管理困难的问题,比如灵活的增删磁盘容量,增删磁盘分区等。 LVM由pv(Physical Volume),vg(Volume Group),lv(logical volu…

    2017-04-23

评论列表(3条)

  • 马哥教育
    马哥教育 2016-09-19 18:08

    1题不对,在仔细看看你的判断条件

    • N21-孟然
      N21-孟然 2016-09-20 09:20

      @马哥教育确实有误,未验证 if [ /sbin/nologin == awk -F’:’ ‘{print $6}’ ];then

  • N21-孟然
    N21-孟然 2016-09-20 09:29

    修改:
    if [ /sbin/nologin == `grep ^$usertest /etc/passwd | awk -F’:’ ‘{print $7}’ ` ];then