本周作业内容:


1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。

  # (以下部分内容摘自百度百科)


  集线器:

    集线器(Hub)是指将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备,主要功能是对接收到的信号进行放大,以扩大网络的传输距离,工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层”。

    集线器是一个多端口的中继器,只负责节点间数据的传递和信号的放大处理,检测冲突但不负责解决阻塞问题,所有端口处于同一个冲突域下。与二层设备如二层交换机区别在于不像交换机一样每个端口分隔冲突域,不具备二层交换机的端口学习能力。使用场景多用于比较简单的局域网内,用于交换机下局域网扩展。


  网桥:

    网桥(Bridge)是早期的两端口二层网络设备,用来连接不同网段。网桥的两个端口分别有一条独立的交换信道,不是共享一条背板总线,可隔离冲突域。网桥比集线器(Hub)性能更好,集线器上各端口都是共享同一条背板总线的。后来,网桥被具有更多端口、同时也可隔离冲突域的交换机(Switch)所取代。

    网桥工作在OSI模型第二层数据链路层,端口分隔冲突域,用于比较小型的局域网扩展。


  二层交换机

    二层交换机工作于OSI模型第二层数据链路层,故而称为二层交换机。二层交换技术的发展已经比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。和网桥的区别在于支持更多端口,转发效率要比网桥快很多;和三层交换机的区别在于三层交换机具有路由的功能,工作在三层网络层。


  三层交换机

    三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。对于数据包转发等规律性的过程由硬件高速实现,而像路由信息更新、路由表维护、路由计算、路由确定等功能,由软件实现。三层交换技术就是二层交换技术+三层转发技术。

    三层交换机工作在OSI模型第三层网络层,处于同一个局域网中的各个子网的互联以及局域网中VLAN间的路由,用三层交换机来代替路由器,而只有局域网与公网互联之间要实现跨地域的网络访问时,才通过专业路由器。三层交换机端口多于路由器。但是三层交换机只有快速以太口和吉比特以太口,不如路由器接口种类丰富。


  路由器

    路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。

    路由工作在OSI第三层即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。路由器每个接口ip都处于不同网段,端口不单分隔冲突域,也分隔广播域


2、IP地址的分类有哪些?子网掩码的表示形式及其作用

  A类

    0000 0000 - 0111 1111:1-127

    网络数126,127保留回环地址

    每个网络中的主机数:2^24-2

    默认子网掩码:255.0.0.0

    私网地址:10.0.0.0/8


  B类

    1000 0000 - 1011 1111:128-191

    网络数:2^14

    每个网络中的主机数:2^16-2

    默认子网掩码:255.255.0.0

    私网地址:172.16.0.0/16-172.31.0.0/16


  C类

    1100 0000 - 1101 1111 :192-223

    网络数:2^21

    每个网络中的主机数:2^8-2

    默认子网掩码:255.255.255.0

    私网地址:192.168.0.0/24-192.168.255.0/24


  D类:组播

    1110 0000 - 1110 1111:224-239


  E类

    240-255


  子网掩码:IP地址和网络地址进行与运算得出

    用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

    子网掩码的长度是32位,也可以使用十进制的形式。例如,为二进制形式的子网掩码:1111 1111.1111 1111.1111 1111.0000 0000,采用十进制的形式为:255.255.255.0


3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。

  # (以下部分内容摘自百度百科)

  OSI模型:

  1)应用层

    OSI参考模型的最高层。其功能是实现应用进程(如用户程序、终端操作员等)之间的信息交换。同时,还具有一系列业务处理所需要的服务功能。

  2)表示层

    数据表示形式的控制层,其主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示。表示层的作用之一是为异种机通信提供一种公共语言,以便能进行互操作。

  3)会话层

    会话单位的控制层,其主要功能是按照在应用进程之间约定的原则,按照正确的顺序收、发数据,进行各种形态的对话。会话层规定了会话服务用户间会话连接的建立和拆除规程以及数据传送规程。

  4)传输层

    端开放系统之间的数据传送控制层。主要功能是端开放系统之间数据的收妥确认。同时,还用于弥补各种通信网路的质量差异,对经过下三层之后仍然存在的传输差错进行恢复,进一步提高可靠性。另外,还通过复用、分段和组合、连接和分离、分流和合流等技术措施,提高吞吐量和服务质量。

  5)网络层

    网络层为建立网络连接和为上层提供服务,应具备以下主要功能:

      a.路由选择和中继;

      b.激活,终止网络连接;

      c.在一条数据链路上复用多条网络连接,多采取分时复用技术;

      d.检测与恢复;

      e.排序,流量控制;

      f.服务选择;

      g.网络管理。

    路由器、三层交换机工作在网络层

  6)数据链路层

    链路层是为网络层提供数据传送服务的,这种服务要依靠本层具备的功能来实现。链路层应具备如下功能:

      a.链路连接的建立、拆除和分离;

      b.帧定界和帧同步。链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界;

      c.顺序控制,指对帧的收发顺序的控制;

      d.差错检测和恢复。还有链路标识,流量控制等等。差错检测多用方阵码校验和循环码校验来检测信道上数据的误码,而帧丢失等用序号检测。各种错误的恢复则常靠反馈重发技术来完成。

    二层交换机、网桥工作在数据链路层

  7)物理层

    物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。

    各种插头、插座。LAN中的各种粗、细同轴电缆、T型接头、插头、接收器、发送器、中继器等都属物理层的媒体和连接器,集线器也工作在物理层。


  TCP/IP模型

    在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。同时将OSI参考模型中的数据链路层和物理层合并为主机到网络层。

  1)应用层

    应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等。

  2)传输层

    传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP)。

  3)网络层

    网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。

  4)主机到网络层

    网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。


4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)

  1) 将网线接入网卡接口,使用ifconfig命令查看网卡设备名称

  2) 事先获取网络规划信息如IP、MASK、GATEWAY、DNS

  3) 配置网络信息,这里使用配置文件方式配置,其它配置方式第5题说明

    cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF

    TYPE=Ethernet

    BOOTPROTO=none

    NAME=eth0

    DEVICE=eth0

    ONBOOT=yes

    IPADDR=192.168.100.101

    PREFIX=24

    GATEWAY=192.168.100.2

    DNS1=192.168.100.2

    EOF

  4) 重启网络服务

    service network restart


5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。

  配置ip地址:

  1)ifconfig命令

    ifconfig eth0 192.168.100.101 netmask 255.255.255.0 

  2)ip 命令

    ip addr add 192.168.100.101/24 dev eth0

  3)配置文件

    cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF

    TYPE=Ethernet

    BOOTPROTO=none

    NAME=eth0

    DEVICE=eth0

    ONBOOT=yes

    IPADDR=192.168.100.101

    PREFIX=24

    GATEWAY=192.168.100.2

    DNS1=192.168.100.2

    EOF

  4)nmcli 命令

    nmcli connection modify eth0 ipv4.addresses "192.168.100.101/24"


  配置路由:

  1)route命令

    route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.38.1

  2)ip 命令

    ip route add 192.168.1.1 via 192.168.100.2 dev eth0

  3)配置文件

    cat > /etc/sysconfig/network-scripts/route-eht0 <

    0.0.0.0/24 via 192.168.100.2

    EOF


  配置dns

  1)配置文件

    cat >> /etc/resolv.conf << EOF

    nameserver 192.168.100.2

    EOF

 2)nmcli命令

    nmcli connection modify eth0 ipv4.dns "192.168.100.2"


  配置主机名

  1)配置文件

    cat > /etc/sysconfig/network << EOF

    HOSTNAME=www.host.com

    EOF

  2)hostnamectl命令

    hostnamectl set-hostname www.host.com


6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;

     在线的主机使用绿色显示;

     不在线的主使用红色显示;

#!/bin/bash
# mageedu_week8_test6
# test ping
#
for i in {1..254};do
    ping -c 1 -w 1 172.16.250.$i &> /dev/null
    if [ $? -eq 0 ];then
        echo -e  "172.16.250.$i \t \033[32m [on] \033[0m"
    else
        echo -e  "172.16.250.$i \t \033[31m [off] \033[0m"
    fi
done
# ps:测试环境使用了192.168.10.0/24网段,并ping前10个ip

马哥2016全新Linux+Python高端运维班第八周作业_第1张图片


7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;

IP,MASK,GW,DNS相关配置文件:/etc/sysconfig/network-scripts/ifcfg-*

路由相关配置文件:/etc/sysconfig/network-scripts/route-*


  /etc/sysconfig/network-scripts/ifcfg-*

    DEVICE=  此配置文件应用到的设备

    HWADDR=  对应设备的MAC地址

    BOOTPROTO=激活此设备时使用的地址配置协议,常用的dhcp,static,none,bootp

    NM_CONTROLLED=NM是networkmanager的简写,此网卡是否接受NM控制,centos6上建议为no

    ONBOOT=  在系统引导时是否激活此设备

    TYPE接口类型,常见的有Ethernet,Bridge

    UUID设备的唯一标识

    IPADDR指明IP地址

    NETMASK子网掩码

    GATEWAY默认网关

    DNS1第一个DNS服务器指向

    DNS2第二个DNS服务器指向

    USERCTL普通用户是否可控制此设备

    PEERDNS如果BOOTPROTO的值为dhcp,是否允许dhcp分配的dns服务器指向信息直接覆盖/etc/resolv.conf


  /etc/sysconfig/network-scripts/route-*

  两种风格:

    1、TARGET via GW

      192.168.0.0/24 via 172.16.0.1

    2、每三行定义一条路由

      ADDRRESS#=TARGET

      NETMASK#=mask

      GATEWAY#=GW


8、如何给网络接口配置多个地址,有哪些方式?

  1)ifconfig命令

    ifconfig IFACE_ALISE IP

    示例:ifconfig eth0:0 192.168.100.110

  2)ip addr命令

    ip addr add IP dev IFACE

    示例:ip addr add 192.168.100.110 dev eth0

  3)配置文件

    ifcfg-IFACE_ALISE

      DEVICE=IFACE_ALISE

    示例:

      cat >> /etc/sysconfig/network-scripts/ifcfg-eth0:0 << EOF

      TYPE=Ethernet

      BOOTPROTO=none

      NAME=eth0:0

      DEVICE=eth0:0

      ONBOOT=yes

      IPADDR=192.168.100.110

      PREFIX=24

      GATEWAY=192.168.100.2

      DNS1=192.168.100.2

      EOF

  4)nmcli命令

    示例:nmcli connection modify eth0 +ipv4.addresses "192.168.100.110/24"


9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。

  1)ping

  ping命令用来测试主机之间网络的连通性

  常用选项:

    -c :设置完成要求回应的次数

    -w :waitsecs 在 waitsecs 秒后停止 ping 程序的执行。当试图检测不可达主机时此选项很有用。

    -q :静态输出。在程序启动和结束时只显示摘要行。

    -s :packetsize 指定要发送数据的字节量

  示例:

    ping 192.168.100.1

    ping -w 1 -c 1 192.168.100.1


  2)tracepath,traceroute

    tracepath命令用来追踪连接到目标地址的所经过的路由

    traceroute命令用于追踪数据包在网络上的传输时的全部路径

    常用选项:

      -p<通信端口>  设置UDP传输协议的通信端口

      -w<超时秒数>   设置等待远端主机回报的时间

      -q   设置每一跳的探测包数量。默认是3 

    示例:

      traceroute -w 3 baidu.com

      tracepath www.baidu.com


  3)netstat,ss

  netstat命令用来查看网络状态

  ss命令也是用来查看网络转态,在连接数比较多的时候比netstat命令性能好,参数用法和netstat基本一致

  显示网络连接

    netstat [--tcp|-t] [--udp|-u] [-n] [-a] 

      -t tcp协议

      -u udp协议

      -w raw socket相关

      -l 处于监听状态

      -a 所有状态

      -n 以数字显示ip和端口

      -e 扩展格式

      -p 显示相关进程的pid

  显示路由表

    netstat [-r] [-n]

     -r 显示内核路由表

      -n 数字格式

  显示接口统计数据

    netstat [-i|-I] [iface] [-a]

      netstat -i

      netstat -I iface

  示例:

    netstat -ant

    netstat -antlp


  4)route

  route命令是用来管理路由

  查看:route -n

  添加:route add

    route add [-net|-host] target [gw] [dev]

    示例:

      route add -host 192.168.100.110 gw 192.168.38.1 dev eth0

      route add -net 192.168.100.0/24 gw 192.168.38.1 dev eth0

    默认路由:

      route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.38.1

      route add default gw 192.168.38.1

  删除:route del

    route del [-net|-host] target [gw] [dev]

    示例:

      route del -host 192.168.100.110

      route del -net 192.168.100.0 netmask 255.255.255.0


  5)host

  host命令用来做DNS查询。如果命令参数是域名,命令会输出关联的IP;如果命令参数是IP,命令则输出关联的域名

  常用选项:

    -i 反向查找

    -a 等同于“-v -t”,显示所有类型,详细信息

    -v 运行时显示详细的处理信息

    -t<类型> 指定类型,包括a、all、mx、ns 

    -4 用于IPv4的查询

    -6 用于IPv6的查询

  示例:

    host www.baidu.com

    host -t ns www.baidu.com


  6)ifconfig

  ifconfig 是一个用来查看、配置、启用或禁用网络接口的工具

    ifconfig [interface]

    示例:

      ifconfig #查看所有已激活网卡的信息

      ifconfig eth0 #查看eth0网卡信息

      ifconfig eth0 192.168.100.100 #配置eth0接口ip地址


  7)ip

  ip是iproute2软件包里面的一个强大的网络配置工具

    ip link set { dev DEVICE | group DEVGROUP } [ { up | down } ]

    示例:

      ip link show #查看所有接口链接信息

      ip link show eth0 #查看eth0接口链接信息

      ip link set dev eth0 up      #up/down 起动/关闭设备

    ip addr {add|del|change|replace} IFADDR dev STRING

    示例:

      ip addr show #查看所有接口ip信息

      ip addr show eth0 #查看eth0接口ip信息

      ip addr add 192.168.100.110 dev eth0 #指定eth0添加一个ip地址

      ip addr del 192.168.100.110 dev eth0 #指定eth0删除ip地址


10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。

  Linux系统软件包管理方法有:

    1)源码包

    2)二进制应用程序包

    3)程序包管理器 rpm

    4)程序包前端工具 yum/dnf

  注意:程序包这里以redhat系发行版为例


  1)源码包

  *.tar.gz、*.bz2形式的源代码

  安装:

    源码包编译安装主要是三个步骤

      a、./configure [cmake]

        通过选项传递参数,指定启用特性,安装路径等,执行时会参考用户的指定以及Makefile.in文件生成makefile

        检查依赖到的外部环境

      b、make 

        根据makefile文件,构建应用程序

      c、make install

        进行安装

  升级:

    只能重新编译

  卸载:

    make uninstall或者把编译指定的安装路径目录删除


  *.src.rpm形式的源代码

  安装:

    安装后,先制作成二进制格式的rpm包,而后再安装

    rpm -rebuild *.src.rpm 

    rpm -ivh *.rpm 

  升级:

    下载新的源码包,重新安装成二进制rpm包

  卸载:

    rpm -e packgename


  2)二进制应用程序包

  二进制应用程序包是已经编译安装好的压缩包,直接解压后就能正常使用,卸载时删除解压缩的目录


  3)程序包管理器 rpm

  安装:rpm -ivh

    -i 安装

    -v 显示详细信息

    -h 显示安装进度

  升级:rpm -Uvh | rpm -Fvh

    upgrage:安装有旧版程序包,则升级,如果不存在旧版,则安装

    freeshen:安装有旧版程序包,则升级,如果不存在旧版,则不会安装

  卸载:rpm -e

    --nodeps 忽略依赖关系

  查询: rpm -q

    -qa 查询所有已安装的程序包

    -qf 查询指定的文件由哪个程序生成

    --whatprovides 查询命令、文件、功能是由哪个包生成的

    --whatrequires 查询指定的文件、命令被哪个包依赖

    --changelog 查询rpm包的changlog

    -qc 查询包的配置文件

    --conflicts 查询是否和其他包冲突

    -qd 查询程序包的文档

    -qi --info 显示包的信息

    -ql 查询程序包安装后生成的所有文件

    --scripts 查询包的脚本

    -R 查询程序包所依赖的CAPABLITY

    --provides 列出指定程序包所提供的CAPABLITY

    -p 使用-p选项查询没有安装的包信息

  校验: rpm -V


  4)程序包前端工具 yum/dnf

  dnf是yum的升级工具,使用方法和yum基本一致,这里使用yum说明

  yum仓库的定义参考11题,这里只说明yum管理程序包的操作

  显示程序包

    yum list 显示所有的程序包

    yum list installed 显示已安装的程序包

    yum list available 显示可安装的程序包

    yum grouplist 显示组

  安装

    yum install 

  升级

    yum update

  检查可用升级

    yum check-update

  卸载

    yum remove

  查看包信息

    yum info

  查看特性由哪个程序包提供

    yum provides

  清理缓存

    yum clean all

  构建缓存

    yum makecache

  重装

    yum reinstall

  降级

    yum dowmgrage

  查看依赖关系

    yum deplist

  查看历史

    yum history

  安装或升级本地程序包

    yum localinstall

    yum localupdate


11、如何使用发行版光盘作为yum repository,请描述该过程。

  1)、挂载光盘镜像

    mount /dev/cdrom /mnt

    或者将光盘iso放到某目录下挂载,这里以CentOS-7为例

    mount -t iso9660 CentOS-7-x86_64-Everything-1511.iso /mnt

  2)、备份原来的配置文件

    cd /etc/yum.repos.d/

    mkdir bak

    mv *.repo bak/

  3)、配置光盘yum配置文件

    cat >> /etc/yum.repos.d/centos7.repo << EOF

    [centos7]

    name=centos7_dvd

    baseurl=file:///mnt

    enabled=1

    gpgcheck=0

    EOF

  4)、重建yum缓存,查看

    yum clean all && yum makecache

    yum repolist


12、写一个脚本,完成以下功能

   (1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;

   (2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;

   (3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;

   (4) 分别统计S开头和K开头的文件各有多少;

#!/bin/bash
# mageedu_week8_test12
# 统计/etc/rc.d/rc3.d/目录下文件
#
declare -i K_file_num=0
declare -i S_file_num=0
for file in $(ls /etc/rc.d/rc3.d/);do
    if [[ $(echo  $file | grep -o "^K") =~ 'K' ]];then
        echo -e "$file \tstop"
        let  K_file_num++
    elif [[ $(echo  $file | grep -o "^S") =~ 'S' ]];then
        echo -e "$file \tstart"
        let S_file_num++
    fi
done
printf "\n================\nK files have : $K_file_num \nS files have : $S_file_num\n"

马哥2016全新Linux+Python高端运维班第八周作业_第2张图片

   

13、写一个脚本,完成以下功能

   (1) 脚本能接受用户名作为参数;

   (2) 计算此些用户的ID之和;

#!/bin/bash
# mageedu_week8_test13
# 统计输入用户的uid之和
#
if [ $# -eq 0 ];then
    echo "No username input "
    exit 1
else
    declare -i uid_sum=0
    declare -a suc_user
    for user in $@ ;do
        if id $user &> /dev/null;then
            uid=$(id -u $user)
            let uid_sum+=$uid
            suc_user=(${suc_user[*]} $user)
        else
            echo "$user is not exist"
        fi
    done
    echo "(${suc_user[@]})sum of the uid is:$uid_sum"
fi

马哥2016全新Linux+Python高端运维班第八周作业_第3张图片


14、写一个脚本

   (1) 传递一些目录给此脚本;

   (2) 逐个显示每个目录的所有一级文件或子目录的内容类型;

   (3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

#!/bin/bash
# mageedu_week8_test14
# 统计输入的目录信息
#
if [ $# -eq 0 ];then
    echo "No directory input "
    exit 1
else
    declare -i dir_num=0
    declare -i files_num=0
    for dir in $@;do
        if [ -d $dir ];then
            for files in $dir/*;do
                file $files
                let files_num++
            done
            printf "\n====================================\n"
            let dir_num++
        else
            echo "$dir is not exist or not a directory"        
        fi
    done
fi
printf "\nDirectory number:$dir_num\nSubdirectory and Files number:$files_num\n"
   
#创建几个测试目录和文件 
# mkdir -p /tmp/test{1,2}/{aa,bb,cc}
# touch /tmp/test{1,2}/testfile

马哥2016全新Linux+Python高端运维班第八周作业_第4张图片


15、写一个脚本

通过命令行传递一个参数给脚本,参数为用户名

如果用户的id号大于等于500,则显示此用户为普通用户;

# 使用centos 7,id号大于等于1000,显示为普通用户
#!/bin/bash
# mageedu_week8_test15
# 判断输入的用户类型
#
if [ $# -eq 0 ];then
    echo "No username input "
    exit 1
fi
if id $1 &> /dev/null;then
    if [ $(id -u $1) -ge 1000 ];then
        echo "$1 is general user"
    elif [ $(id -u $1) -eq 0 ];then
        echo "$1 is root user"
    else
        echo "$1 is system user"
    fi
else
    echo "$1 not exist"
fi

马哥2016全新Linux+Python高端运维班第八周作业_第5张图片


16、写一个脚本

   (1) 添加10用户user1-user10;密码同用户名;

   (2) 用户不存在时才添加;存在时则跳过;

   (3) 最后显示本次共添加了多少用户;

#!/bin/bash
# mageedu_week8_test16
#
#
declare -i i=1
declare -i sum=0
declare -a suc_add_user

if [ $UID -ne 0 ];then
    echo "Only root user can create users"
    exit 1
fi

while [ $i -le 10 ];do
    if id user$i &> /dev/null;then
        echo "user$i is exist"
    else
        useradd user$i && echo "user$i" | passwd --stdin user$i &> /dev/null
        suc_add_user=(${suc_add_user[*]} user$i)
        let sum++
    fi
    let i++
done

echo "Total have $sum users to add"
echo "Add users: ${suc_add_user[*]}"

马哥2016全新Linux+Python高端运维班第八周作业_第6张图片


17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;

# 和第6题脚本思路一致,上题使用了for循环,这次使用while循环实现
# 也是使用了192.168.10.0/24网段

#!/bin/bash
# mageedu_week8_test6
# test ping 2
#
declare -i i=20
while [ $i -le 100 ];do
    if ping -w 1 -c 1 192.168.10.$i &> /dev/null;then
        echo -e "192.16.10.$i \t[on]"
    fi
    let i++
done

马哥2016全新Linux+Python高端运维班第八周作业_第7张图片


18、打印九九乘法表;


#!/bin/bash
# mageedu_week8_test18
# 使用for循环实现九九乘法表
#
for ((i=1;i<=9;i++));do
    for ((j=1;j<=i;j++));do
        echo -e -n "${i}*${j}=$[$i*$j]\t"
    done
    echo
done


#!/bin/bash
# mageedu_week8_test18
# 使用while循环实现九九乘法表
#
declare -i i=1
declare -i j=1
while [ $j -le 9 ];do
    while [ $i -le $j ];do
        echo -e -n "$i*$j=$[$i*$j]\t"
        let i++
    done
    echo 
    let i=1
    let j++
done

马哥2016全新Linux+Python高端运维班第八周作业_第8张图片