马哥教育网络班22期+第九周课程练习

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

#!/bin/bash
#
declare -a loginuser
declare -i sum_login=0
declare -i sum_nologin=0
list=($(cat /etc/passwd |awk -F: '{print $NF}'))

for ((i=1;i<=${#list[*]};i++));do
   if [[ "${list[i]}" == "/sbin/nologin" ]];then
       let sum_nologin=$sum_nologin+1
   else [[ "${list[i]}" == "/bin/bash" ]]
       let sum_login=$sum_login+1
   fi
done
   echo "no login users is $sum_nologin"
   echo "login users is $sum_login"

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

#!/bin/bash
#
hostname=$(hostname)
if [[ $hostname == "localhost" ]];then
   hostname wwww.magedu.com
else
   echo $hostname
fi

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

#!/bin/bash
#
if [ $# -lt 1 ];then
   echo "Usage:`basename $0` devicename"
   exit 3
fi

if [ -e $1 ];then
   fdisk -l $1
else
   echo "Without this device"
fi

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

#!/bin/bash
#
read -p "Please input your choice:" option

while [[ $option == "yes" ]];do
   read -p "Please input your choice again:" option
done

if [[ $option == "quit" ]];then
   echo "Quit"
   exit 0
else
   echo "Error"
   exit 3
fi

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 "Usage:`basename $0` {gzip|bzip2|xz}"
   exit 3
fi

if [ -d /backups ];then
   return
else
   mkdir /backups &>/dev/null
fi

case $1 in
gzip)
tar -zcvf /backups/etc-$(date "+%Y%m$d").tar.gz /etc
;;
bzip2)
tar -jcvf /backups/etc-$(date "+%Y%m$d").tar.bz2 /etc
;;
xz)
tar -Jcvf /backups/etc-$(date "+%Y%m$d").tar.xz /etc
;;
*)
echo "Unkown"
;;
esac

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

#!/bin/bash
#
if [ $# -lt 1 ];then
   echo "Usage:`basename $0` Path1"
   exit 3
fi

if [[ -f $1 ]];then
   echo "This is a common file"
elif [[ -d $1 ]];then
   echo "This is a directory."
elif [[ -L $1 ]];then
   echo "This is a Links file"
else
   echo "Unknow"
fi

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

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

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

#!/bin/bash
#
if [ $# -lt 1 ];then
   echo "Usage:`basename $0` USERNAME"
   exit 3
fi

if ! id -u $1 &>/dev/null ;then
   echo "User $1 is not exists."
else
   if [ `id -u $1` -eq 0 ];then
       echo "User $1 is admin user"
   elif [ `id -u $1` -lt 500 ];then
       echo "User $1 is system user"
   else
       echo "User $1 is common user"
   fi
fi

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

#!/bin/bash
#
if [ $# -lt 1 ];then
   echo "Usage:`basename $0` USERNAME"
   exit 3
fi

if ! id -u $1 &>/dev/null ;then
   echo "User $1 is not exists"
else
   if [ "`id -u $1`" -ge "500" -a "`cat /etc/passwd |grep $1 |grep -o  sh$`" == "sh" ];then
       echo "A user can log system"
   else
       echo "Can not login to the system"
   fi
fi

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

#!/bin/bash
#
file=/var/log/*

for i in $file;do
   if [ -d $i ];then
       cp -r $i /tmp/test1-testn
   elif [ -f $i ];then
       cp $i /tmp/test1-testn
   elif [ -L $i ];then
       cp -d $i /tmp/test1-testn
   else
       cp -a $i /tmp/test1-testn
   fi

done

原创文章,作者:N22-白蚁,如若转载,请注明出处:http://www.178linux.com/65482

(0)
N22-白蚁N22-白蚁
上一篇 2017-01-03
下一篇 2017-01-03

相关推荐

  • linux文件、目录基本操作命令及bash特性介绍

    1、文件层级FHS介绍: Filesystem Hierarchy Standard(文件系统层次化标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。 FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。 /:linux文件系统根目录 /…

    2017-09-17
  • N26第五周博客作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;grep “^[[:space:]]+” /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;grep “^#[[:space:…

    Linux干货 2017-03-06
  • linux下的文件查找命令对比(locate,find,grep,sed)

        在linux下,文件系统占据着非常重要的位置,而我们对于文件系统的操作也显得尤为重要。 如果我们想熟悉的操作文件系统,其中,我们需要对文本的查找,截取等命令需要熟悉的掌握。 这里就不得不说几个关于文本操作的几个命令的作用详细介绍和对比。比如: locate,find ,grep ,sed等。 这里,grep ,…

    Linux干货 2016-08-15
  • 用户查找与添加 第四周

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp /etc/skel /home/tuser1  chmod -R go=— /home/tuser1 2、编辑/etc/group文件,添加组hadoop…

    Linux干货 2017-02-14
  • HAproxy实战

    HAproxy实验一 1、实验要求: (1) 动静分离discuzx,动静都要基于负载均衡实现; (2) 进一步测试在haproxy和后端主机之间添加varnish缓存(见实验二步骤); (3) 给出拓扑设计; (4) haproxy的设定要求: (a) 启动stats; (b) 自定义403、502和503的错误页; (c) 各组后端主机选择合适的调度方法…

    Linux干货 2016-11-15
  • 软链接与硬链接的分析

    Linux引用硬链接与软链接,是为了实现文件的共享,更有隐藏文件路径、增加权限安全及节省存储等的好处。很多新手不知道软链接与硬链接的区别,今天大家一起总结它们的区别吧^_^ 一,硬链接 硬链接的特性可以体现出什么是硬链接: 通过索引节点来进行链接,文件要有相同的inode及data block 不允许跨分区创建 只有在同一文件系统中的文件之间才可以,不能交叉…

    2017-07-22

评论列表(1条)

  • 马哥教育
    马哥教育 2017-01-04 16:08

    脚本写的很棒,排版也很漂亮,但是注意,不要使用系统的命令来作为变量名,加油