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

相关推荐

  • ansible进阶(roles应用)

    ansible 进阶 一、roles简介 一个项目从开始到结束,不是简单几十个playbook就可以完事了,当文件数很多,有上百个的话,仅通过简单的includes不停的引用,那最终的结果错综复杂。这个时候ansible roles就可以很好的发挥它的作用了。 roles,字面意思是角色的含义,可以理解为有相互关联功能的集合。我们把安装ntp、mem、ngi…

    2017-01-05
  • 如何安装VMware Workstation

    1、打开安装包,直接点击“下一步” 2、选择接受条款,单击“下一步” 3、选择安装路径,单击“下一步” 4、单击“下一步”,也可以勾选掉两个选项   5、单击“下一步”   6、点击“安装”   7、完成安装  

    2017-07-11
  • N22-第2周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示 cd、pwd、ls、alias、cat、more、less、tail、cut、wc、touch、mv、cp、rm pwd:用户当前所在目录 [xuc@localhost ~]$ pwd /home/xuc cd:切换目录  cd  [/PATH…

    Linux干货 2016-08-22
  • 一张图认识开源世界

    开源精神:自由,创新,团结,互助,友爱,积极,进取。在开源环境下也产生了很多优秀的软件,让我们通过一幅图认识一下开源世界里的大咖们! 看图识物     墙上挂的牛头:伟大的开源计划GNU Wiki:http://zh.wikipedia.org/zh-cn/GNU     墙上日历上的信封标志:经典的linux下的邮件…

    Linux干货 2015-03-20
  • CentOS6基础网络配置

    虽然也可以用命令进行临时修改(ifconfig来设置IP,用route来配置网关,用hostname来配置主机名等等),但是重启后会丢失。所以本文主要通过修改相关配置文件来实现: 配置dns、网关、ip地址 修改网卡名字 单网卡多IP配置 多网卡单IP配置 本次系统运行环境:  配置dns、网关、ip地址 首先,我们对网卡配置相关的主要的几个文件简…

    Linux干货 2016-09-06
  • Centos6.5基于SSL密码认证部署ELK(Elasticsearch+Logstash+kibana)

    1       简介 本章我们来介绍Centos6.5基于SSL密码认证部署ELK(Elasticsearch 1.4.4+Logstash 1.4.2+kibana3),同时为大家介绍如何集合如上组件来收集日志,本章的日志收集主要为大家介绍SYSTEM日志收集. 集中化日志收集主要应用场景是在同一…

    Linux干货 2015-06-18

评论列表(1条)

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

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