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

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

#!/bin/bash
m=0
n=0
for i in `awk -F: '{print $NF}' /etc/passwd`
do
  if [[ "$i" = "/usr/sbin/nologin" ]];then
      let m+=1
  else
      let n+=1
  fi
done
echo "the shell is nologin :$m"
echo "the other is :$n"

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

#!/bin/bash
HOSTNAME=`hostname`
echo $HOSTNAME
if [[ "$HOSTNAME" = "localhost" ]];then
    hostname www.magedu.com
else
    hostname
fi

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

#!/bin/bash
echo "please input a dev file:" 
read DEV
ls -l /dev|grep $DEV &> /dev/null
if [ $? -eq 0 ];then
  fdisk -l /dev/$DEV
else
  exit 100
fi

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

#!/bin/bash
case $1 in
quit)
    echo "exit this script"
    exit 0
    ;;
yes)
    echo "continue..."
    ;;
*)
   exit 127
    ;;
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
echo "please select one opthion in (gzip/bzip2/xz):"
read OPTION
if [ ! -d /backups/ ];then
    mkdir /backups
fi
case $OPTION 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 cvf /backups/etc-`date +%Y%m%d`.tar /etc/
    xz -z /backups/etc-`date +%Y%m%d`.tar
    ;;
*)
    exit 127
    ;;
esac

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

#!/bin/bash
echo "please input a path"
read PATH
if [ -d $PATH ];then
   echo "This is a directory.You can apply the 'cd' on it."
elif [ -f $PATH ];then
   echo "This a regular file.You can access it normally."
elif [ -L $PATH ];then
   echo "This is a path to others"
else
   echo "Sorry,I can't make it"
fi

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

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

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

#!/bin/bash
echo "please input the username:"
read p
  a=`grep ^"\b${p}\b" /etc/passwd|cut -d: -f3`
echo $a
if [ $a -eq 0 ];then
    echo "hello,administrater"
elif [ $a -gt 0 -a $a -lt 500 ];then
    echo "this is a system user"
else
    echo "this is a common user"
fi

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

#!/bin/bash
echo "please input the username:"
read p
  a=`grep ^"\b${p}\b" /etc/passwd|cut -d: -f3`
echo $a
  s=`grep ^"\b${p}\b" /etc/passwd|awk -F: '{print $NF}' |cut -d"/" -f3`
echo $s
if [ $a -ge 500 -a ${s:0-2} = "sh" ];then
    echo "a user can log system."
else
    echo "login denied"
fi

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

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

原创文章,作者:π,如若转载,请注明出处:http://www.178linux.com/45412

(0)
ππ
上一篇 2016-09-15 22:21
下一篇 2016-09-15 22:21

相关推荐

  • python面向对象学习第一周

     面向对象的思想 一个具体对象的属性方法,都有各个来源,来源于类,比如消化类,有各种各样的消化模式,人类的只是其中一种 另一种思想方法,类有各种属性方法,人类有很多的属性,一个人应该包括其中的属性,只是值上可能有不同,不同人群也有他们的特征属性和方法     类是对象的抽象,但是类本身也是对象, 对象是一个类的实例. 类的属性:类变量,对象方法,类方法,静态…

    Linux干货 2017-11-13
  • LVM逻辑卷扩展与缩小

    逻辑卷扩容:扩展逻辑卷前一定要卸载设备和挂载点的关联 第一步:把逻辑卷lv扩展至300M 第二步:检查硬盘,并重置硬盘容量 第三步:重新挂载,查看挂载状态   缩小逻辑卷:对逻辑卷缩容时,丢失数据的风险更大。在执行操作前一定要提前备份好数据。在进行缩减前先把文件系统卸载掉。 第一步:检查文件 第二步:把逻辑卷lv减小到100M 第三步:重新挂载并查…

    2017-12-17
  • LVS负载均衡wrrdpress

    项目要求:(1) lvs 调度两台 nginx+php-fpm real-server,采用 dr 模型,调度算法为 rr(2) mariadb 为 real-server 提供数据库,nfs 挂载至 2 台 real-server 提供文件服务项目环境:LVS-SERVER( CentOS 7 )DIP:172.18.99.6VIP:172.18.99.6…

    Linux干货 2017-05-16
  • Shell脚本编程 流程控制—选择

    流程控制可根据不同的情况做不同的处理,而且可重复执行指定的程序区域,在shell bash中流程控制可分为两大类: "选择"和"循环" 1.选择:if、case、select 2.循环:for、while、until、select 命令结束状态返回值: 在shell中命令执行状态返回值分两种,成功和失败,0表示成功,非…

    Linux干货 2016-08-24
  • varnish4 基础实战

    实验环境 node1 192.168.0.8 varnish服务器 node2 192.168.0.3 动态web node3 192.168.0.7 静态web node1安装varnish ##安装varnish yum源  # wget http://repo.varnish-cache.org/redhat/v…

    Linux干货 2016-11-15
  • 多方面修复linux系统

    在这篇文章,您将看到以下方面的修复方法: ●内核文件和虚拟 ●grub.conf ●grub目录 ●boot分区 ●fstab文件 ●root密码破解   首先,要想很愉快的修复linux启动的各种问题,就必然要把linux的启动流程搞清楚。 1. 加载 BIOS 的硬件信息和进行自我测试,并依据设定取得第一个可开机的装置; 2. 读取并执行第一个…

    Linux干货 2016-09-13

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-19 17:39

    输入的时候可以直接用read -p ,1题不对