马哥教育网络班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 11:05
下一篇 2017-01-03 11:05

相关推荐

  • 通过Xshell 5连接VirtualBox的centos

    环境:VirtualBox  centos6.5 1、使用VirtualBox Host-Only Network模式 2、打开宽带连接,设置属性,选择VirtualBox Host-Only Network共享。(在这里虚拟机centos的IP地址是自动获得,并且可以上网。) 3、虚拟机centos需要     关闭防火墙 :…

    Linux干货 2015-11-07
  • PHP异常处理详解

    PHP异常处理详解          异常处理(又称为错误处理)功能提供了处理程序运行时出现的错误或异常情况的方法。   异常处理通常是防止未知错误产生所采取的处理措施。异常处理的好处是你不用再绞尽脑汁去考虑各种错误,这为处理某一类错误提供了一个很有效的方法,使编程效率大大提高。当异常被触发时,通常会发生:&…

    Linux干货 2015-06-02
  • 马哥教育网络班21期+第14周课程练习

    系统的INPUT和OUTPUT默认策略为DROP; 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机; INPUT链 # iptables -I INPUT 1 -p tcp&nb…

    Linux干货 2016-11-14
  • M22 Centos6上编译安装httpd2.4并实现HTTPS浏览

    随着网络技术的发展,人们对信息安全越来越重视,传统的http浏览互联网的方式由于未经加密,其安全性广为人们诟病,https协议作为加密的互联网解决方案解决了这一问题。下面我就简要说明下如何实现通过https发布web页面的。   实验目的: 模拟Centos6上安装httpd2.4,并实现https加密访问主页 实验器材: Centos6.8虚拟机…

    Linux干货 2017-04-20
  • 常用文本处理工具及grep和正则表达式

    一、文件查看命令 (1)普通查看工具:cat,tac,rev  1、cat命令常用选项    -n:显示行号    -E:显示行结束符$    -A:显示所有控制符  2、tac:从最后一行开始倒序显示  3、rev:将每一行的内容反转显示   (2)分页查看…

    Linux干货 2016-08-11
  • redis主从复制(2)— replication buffer与replication backlog

    1、redis主从复制过程先不解释replication buffer和replication backlog,而先看看redis主从复制的过程。 redis的主从复制分为两个阶段: 1)同步(sync rdb snapshot):slave复制master的某时间点(t)的全量数据,t为master接收到slave的sync命令后执行rdb bgsave的…

    Linux干货 2016-04-05

评论列表(1条)

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

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