马哥教育网络班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

相关推荐

  • 推荐-​以各种方式实现yum源,简单暴力,绝对实操干货!

    以各种方式实现yum源,简单暴力,绝对实操干货! 科普:yum不是程序包安装工具,而是rpm包前端管理工具,通过yum可以更好的管理rpm的安装卸载 以各种方式实现yum源,简单暴力,绝对实操干货! 一、本地yum源之“挂载光盘镜像实现”! 二、本地yum源之“挂载本地磁盘上的镜像文件”! 三、如能上网,实现自定义指定镜像网站yum源 四、炸天重磅来袭!!!…

    Linux干货 2016-04-11
  • Shell脚本编程基础之一

      Linux为高效管理系统,提供了CLI命令行接口,供用户在命令提示符下输入命令,它有很多bash shell基础特,根据这些特性能够很灵活的使用命令,也支持使同时输入多个命令执行,命令之间用冒号分隔;但是要完成复杂多次重复性的操作,非常不便,系统管理工作变得很是繁忙,很难轻松完成工作任务;不过Linux的shell支持脚本编程,通过编写纯文本格…

    Linux干货 2016-08-15
  • linux终端的类型与linux发展历史

    一、linux console的类型与说明 说明:        1 由于虚拟终端的实现,人们可以多用户多任务的在一台计算机操作系统上工作             2 在80或90年代的旧电脑上,人们只能用分屏这样的方法来实现多用户,多任务的工作  …

    Linux干货 2016-11-03
  • 软件包管理利器之一&RPM

      概述:我们知道使用源代码进行软件编译可以具有定制化的设置,但对于Linux distribution的发行商来说,则有软件管理不易的问题,毕竟不是每个人对于操作系统都非常的熟悉,不是每个人都会进行源代码编译的,因此如果能够将软件现在相同的硬件与操作系统上编译好才发行的话,如果再加上简易的安装/删除/管理等机制,则对于软件管理会简单的多…

    Linux干货 2016-08-24
  • LVM基本原理及使用

    LVM简介 LVM全称Logical Volume Manager(逻辑卷管理),是将几个物理分区(或硬盘)通过软件组合成一块看起来是独立大硬盘(VG),然后对这块大硬盘分割成可使用的逻辑卷(LV),最终能够挂载使用,以达到对磁盘空间进行弹性管理的目的。 LVM的基本原理 基本术语 dm(device mapper):将一个或多个底层块设备组织成一个逻辑设备…

    Linux干货 2016-04-17
  • N25-第二周博客作业

    第二周博客作业 1.Linux上的文件管理类命令都有哪些,其常用的使用方法和演示 2.bash的工作特性之命令执行状态返回值和命令行展开所涉及内容演示及其实例 3.请使用命令行展开功能完成以下练习;    (1)创建/tmp的目录下a_c,a_d,b_c,b_d     (2) 创建/tmp/mylinux目录下的 4…

    Linux干货 2016-12-11

评论列表(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