本周作业内容:

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

1
2
3
4
     集线器:又称“HUB”主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层”。
     二层交换机:工作于OSI模块的第2层(数据链路层),故称为二层交换机。可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。
     三层交换机:就是具有路由功能的交换机,工作在OSI模型的第三层(网络层)最重要目的是加快大型局域网内部的数据交换,能够做到一次路由,多次转发。可用于网络的汇聚与核心设备。
     路由器:是在OSI模型的第三层——网络层——连接两个网络、并对分组报文进行转发的设备。网桥是根据MAC地址进行处理,而路由器则是根据IP地址进行处理的。路由器的主要作用就是为经过路由器的数据包选择一条最佳传输途径,并将数据包有效地送达目的地。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
     现在的IP网络使用32位地址,以点分十进制表示.
     A类:
     0 000 0000 - 0 111 1111: 1-127
     网络数:126, 127
     每个网络中的主机数:2^24-2
     默认子网掩码:255.0.0.0
     私网地址:10.0.0.0 /8
      
     B类:
     10 00 0000 - 10 11 1111:128-191
     网络数:2^14
     每个网络中的主机数:2^16-2
     默认子网掩码:255.255.0.0
     私网地址:172.16.0.0 /16-172 .31.0.0 /16
      
     C类:
     110 0 0000 - 110 1 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
1
     子网掩码又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。区分网络上的主机是否处于同一子网络中。

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

OSI七层模型:  TCP/IP 4层模型:
应用层:提供应用程序之间的通信。     应用层
表示层:处理数据格式,数据加密
会话层:建立,维护,管理回话连接及操作系统和网络接口和各种数据
传输层:建立主机端到端连接。  传输层tcp udp
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。涉及设备:路由器,防火墙。 网络层ipv4 ipv6
数据链路层:提供介质访问,链路管理,将数据分桢并处理流控制。涉及设备:网卡,网桥,交换机。 设备驱动程序和硬件
 物理层:比特流传输,将数据转换为可通过物理介质传送的电子信号。涉及设备双绞线、同轴电缆,集线器。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     配置IP:vim  /etc/sysconfig/network-scripts/ifcfg-eth0
         示例:    DEVICE=eth0     ##设备名称
                 HWADDR=00:0C:29:AA:09:30     ##MAC地址
                 TYPE=Ethernet     ##以太网类型
                 UUID=946794ba-f825-4a22-8888-e825aa2eef25     ##设备UUID
                 ONBOOT= yes     ##启动设置yes开启启动
                 NM_CONTROLLED= yes     ##network manger 开启|关闭
                 BOOTPROTO=static     ##此为静态配置,也可以改为“none”
                 IPADDR=192.168.137.32     ##IP地址
                 NETMASK=255.255.255.0     ##掩码
                 GATEWAY=192.168.137.1     ##网关
                 DNS1=192.168.137.1     ##这里配置就不用再配置下面的dns服务
     修改dns服务器:vim  /etc/resolv .conf
                 添加 nameserver 192.168.137.1
     重启服务:
             service network restart

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

1
2
3
     1) ifconfig 命令方式: ifconfig  eth0 192.168.137.35 netmask 255.255.255.0
     2)ip命令方式: ip addr add 192.168.137.31 /24  dev eth0
     3)配置文件方式:配置同第4题。

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
     [root@liu homework8] # cat 6.sh 
     #!/bin/bash
     #
     net= '192.168.137'
     declare  -i uphosts=0 
     declare  -i downhosts=0
     for  in  {1..254}; do
         ping  -c 1 -w 1 ${net}.${i} &>  /dev/null
         if  [ $? - eq  0 ]; then
         echo  -e  "\033[32m ${net}.${i} is up.\033[0m"
         let  uphosts++
         else
         echo  -e  "\033[31m ${net}.${i} is down.\033[0m"
         let  downhosts++
         fi
     done
     echo  "Up hosts: $uphosts."
     echo  "Down hosts: $downhosts."
     测试脚本:
     ] # bash 6.sh    
      192.168.137.30 is up.     #绿色
      192.168.137.31 is down  #红色
      192.168.137.32 is up.     #绿色
     Up hosts: 4.
     Down hosts: 250.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
             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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            ifconfig :
                 ifconfig  eth0:0 192.168.137.31 /24  up
             ip
                 ip addr add 192.168.137.31 /24  dev eth0:0
             查看网卡地址:
             [root@liu homework8] # ip addr show eth0
             2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 10
             00    link /ether  00:0c:29:45:cc:5e brd ff:ff:ff:ff:ff:ff
                 inet 192.168.137.30 /24  brd 192.168.137.255 scope global eth0
                 inet 192.168.137.31 /24  brd 192.168.137.255 scope global secondary eth0:0
                 inet6 fe80::20c:29ff:fe45:cc5e /64  scope link 
                    valid_lft forever preferred_lft forever
             配置文件:
                 ifcfg-eth0:0
                     DEVICE=eth0:0
             注意:网关别名不能使用dhcp协议引导;

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

1
2
3
4
5
6
7
8
         1)     ifconfig 命令
                 ifconfig  [interface]
                     # ifconfig -a
                     # ifconfig IFACE [up|down]
                    ifconfig  interface [aftype] options | address ...
                        # ifconfig IFACE IP/mask [up]
                        # ifconfig IFACE IP netmask MASK
                        注意:立即生效;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
         2)  route命令
                    路由管理命令
                        查看:route -n
                        添加:route add
                            route add  [-net|-host]  target [netmask Nm] [gw Gw] [[dev] If]
                                目标:192.168.1.3  网关:172.16.0.1
                                ~] # route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
                                目标:192.168.0.0 网关:172.16.0.1
                                ~] # route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
                                ~] # route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
                                默认路由,网关:172.16.0.1
                                ~] # route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
                                ~] # route add default gw 172.16.0.1
                        删除:route del
                            route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
                                目标:192.168.1.3  网关:172.16.0.1
                                ~] # route del -host 192.168.1.3
                                目标:192.168.0.0 网关:172.16.0.1
                                ~] # route del -net 192.168.0.0 netmask 255.255.255.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
         3)   netstat 命令:
                        netstat  - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
                        显示网络连接:
                            netstat  [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]]  [--program|-p]
                                -t: tcp协议相关
                                -u: udp协议相关
                                -w: raw socket相关
                                -l: 处于监听状态
                                -a: 所有状态
                                -n: 以数字显示IP和端口;
                                -e:扩展格式
                                -p: 显示相关进程及PID
                                常用组合:
                                    -tan, -uan, -tnl, -unl
                        显示路由表:
                            netstat   {--route|-r} [--numeric|-n]
                                -r: 显示内核路由表
                                -n: 数字格式
                        显示接口统计数据:
                            netstat   {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n] 
                                # netstat -i
                                # netstat -I IFACE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
         4)    ip命令:
             ip - show / manipulate routing, devices, policy routing and tunnels
             ip [ OPTIONS ] OBJECT { COMMAND | help }
                 OBJECT := { link | addr | route }
             link OBJECT:
                 ip link - network device configuration
                     set
                         dev IFACE
                         可设置属性:
                             up and down:激活或禁用指定接口;
                     show
                         [dev IFACE]:指定接口
                         [up]:仅显示处于激活状态的接口
                 ip address - protocol address management
                     ip addr { add | del } IFADDR dev STRING
                         [label LABEL]:添加地址时指明网卡别名
                         [scope {global|link|host}]:指明作用域
                             global: 全局可用;
                             link: 仅链接可用;
                             host: 本机可用;
                         [broadcast ADDRESS]:指明广播地址
                     ip address show -  look  at protocol addresses
                         [dev DEVICE]
                         [label PATTERN]
                         [primary and secondary]
                     ip address flush - flush protocol addresses
                         使用格式同show
                 ip route - routing table management
                     ip route add
                         添加路由:ip route add TARGET via GW dev IFACE src SOURCE_IP
                             TARGET:
                                 主机路由:IP
                                 网络路由:NETWORK /MASK
                             添加网关:ip route add defalt via GW dev IFACE
                     ip route delete
                         删除路由:ip route del TARGET 
                     ip route show
                     ip route flush
                         [dev IFACE]
                         [via PREFIX]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
         5)    ss命令:
             格式:ss [OPTION]... [FILTER]
                 选项:
                     -t: tcp协议相关
                     -u: udp协议相关
                     -w: 裸套接字相关
                     -x:unix sock相关
                     -l: listen状态的连接
                     -a: 所有
                     -n: 数字格式
                     -p: 相关的程序及PID
                     -e: 扩展的信息
                     -m:内存用量
                     -o:计时器信息
                     FILTER := [ state TCP-STATE ] [ EXPRESSION ]
             TCP的常见状态:
                 tcp finite state machine:
                     LISTEN: 监听
                     ESTABLISHED:已建立的连接
                     FIN_WAIT_1
                     FIN_WAIT_2
                     SYN_SENT
                     SYN_RECV
                     CLOSED
                 EXPRESSION:
                     dport = 
                     sport = 
                     示例:’( dport = : ssh  or sport = : ssh  )’
             常用组合:
                 -tan, -tanl, -tanlp, -uan

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
         安装:
             rpm {-i|-- install } [ install -options] PACKAGE_FILE ...
                 - v : verbose
                 -vv: 
                 -h: 以 #显示程序包管理执行进度;每个#表示2%的进度
                 rpm -ivh PACKAGE_FILE ...
                     [ install -options]
                         -- test : 测试安装,但不真正执行安装过程;dry run模式;
                         --nodeps:忽略依赖关系;
                         --replacepkgs: 重新安装;
                         --nosignature: 不检查来源合法性;
                         --nodigest:不检查包完整性;
                         --noscipts:不执行程序包脚本片断;
                             %pre: 安装前脚本; --nopre
                             %post: 安装后脚本; --nopost
                             %preun: 卸载前脚本; --nopreun
                             %postun: 卸载后脚本;  --nopostun
         升级:
             rpm {-U|--upgrade} [ install -options] PACKAGE_FILE ...
             rpm {-F|--freshen} [ install -options] PACKAGE_FILE ...
                 upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
                 freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;
                 rpm -Uvh PACKAGE_FILE ...
                 rpm -Fvh PACKAGE_FILE ...
                 --oldpackage:降级;
                 --force: 强行升级;
             注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核;
                   (2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
         查询:
             rpm {-q|--query} [ select -options] [query-options]
             [ select -options]
                 -a: 所有包
                 -f: 查看指定的文件由哪个程序包安装生成
                 -p  /PATH/TO/PACKAGE_FILE :针对尚未安装的程序包文件做查询操作;
                 --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
                 --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
             [query-options]
                 --changelog:查询rpm包的changlog
                 -c: 查询程序的配置文件
                 -d: 查询程序的文档
                 -i: information
                 -l: 查看指定的程序包安装后生成的所有文件;
                 --scripts:程序包自带的脚本片断
                 -R: 查询指定的程序包所依赖的CAPABILITY;
                 --provides: 列出指定程序包所提供的CAPABILITY;
             用法:
                 -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
                 -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
                 -qa
         卸载:
             rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
                [--notriggers] [-- test ] PACKAGE_NAME ...
         校验:
             rpm {-V|--verify} [ select -options] [verify-options]
                file  Size differs
                M Mode differs (includes permissions and  file  type )
                5 digest (formerly MD5  sum ) differs
                D Device major /minor  number mismatch
                L readLink(2) path mismatch
                U User ownership differs
                G Group ownership differs
                T mTime differs
                P caPabilities differ

           
yum程序包管理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
         yum命令的用法:
         yum [options] [ command ] [package ...]
         显示仓库列表:
             repolist [all|enabled|disabled]
         显示程序包:
             list
                 # yum list [all | glob_exp1] [glob_exp2] [...]
                 # yum list {available|installed|updates} [glob_exp1] [...]
         安装程序包:
             install  package1 [package2] [...]
             reinstall package1 [package2] [...]  (重新安装)
         升级程序包:
             update [package1] [package2] [...]
             downgrade package1 [package2] [...] (降级)
         检查可用升级:
             check-update
         卸载程序包:
             remove | erase package1 [package2] [...]
         查看程序包information:
             info [...]
         查看指定的特性(可以是某文件)是由哪个程序包所提供:
             provides | whatprovides feature1 [feature2] [...]
         清理本地缓存:
             clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
         构建缓存:
             makecache
         搜索:
             search string1 [string2] [...]
             以指定的关键字搜索程序包名及summary信息;
         查看指定包所依赖的capabilities:
             deplist package1 [package2] [...]
         查看yum事务历史:
             history  [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new| sync |stats]
         安装及升级本地程序包:
             * localinstall rpmfile1 [rpmfile2] [...]
                (maintained  for  legacy reasons only - use  install )
             * localupdate rpmfile1 [rpmfile2] [...]
                (maintained  for  legacy reasons only - use update)
         包组管理的相关命令:
             * groupinstall group1 [group2] [...]
             * groupupdate group1 [group2] [...]
             * grouplist [hidden] [groupwildcard] [...]
             * groupremove group1 [group2] [...]
             * groupinfo group1 [...]

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     用光盘当作本地yum仓库:
         (1) 挂载光盘至某目录,例如 /media/cdrom
             # mkdir -pv /media/cdrom
             # mount -r -t iso9660 /dev/cdrom /media/cdrom
         (2) 创建配置文件
             [dvd]
             name =  install  dvd 
             baseurl =  file : ///media/cdrom
             enabled = 1
             gpgcheck = 0
         (3)清理本地缓存:
                 make  clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
             构建缓存:
                 makecache
             或:yum repolist 重建仓库的元数据索引。

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

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

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

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

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

1
2
3
4
5
6
7
8
     #!/bin/bash
     #
     ls  /etc/rc .d /rc3 .d /K *| awk  '{printf "%s Stop \n", $1}' | awk  -F '/'  '{print $NF}'
     ls  /etc/rc .d /rc3 .d /S *| awk  '{printf "%s Start \n", $1}' | awk  -F '/'  '{print $NF}'
     k_lines=` ls  /etc/rc .d /rc3 .d /K *| awk  '{print NR}' | tail  -1`
     s_lines=` ls  /etc/rc .d /rc3 .d /S *| awk  '{print NR}' | tail  -1`
     echo  "k start lines is $k_lines"
     echo  "s start lines is $s_lines"

方案二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     #!/bin/bash
     #
     declare  -i k=0
     declare  -i s=0
     dir_name= "/etc/rc.d/rc3.d/"
      
     for  list  in  $( ls  $dir_name); do
       if  echo  $list |  grep  "^K*$"  &>  /dev/null ; then
         echo  "$list stop"
         let  k++
       else
         echo  "$list start"
         let  s++
       fi
     done
     echo  "kfile $k"
     echo  "sfile $s"

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     #!/bin/bash
     #
     declare  -i  sum =0
      
     if  [ $ # -eq 0 ];then
       echo  "Usage: $0 User_name ..."
       exit
     fi
     for  list  in  $*; do
       if  id  $list &>  /dev/null ; then
         user_id=$( id  -u $list)
         let  sum +=$user_id
       else
        echo   "$list is not exist"
       fi
     done
     echo  "id total is $sum"

脚本测试:

    [root@liu homework8]# id -u user2
    3027
    [root@liu homework8]# id -u user4
    3029

    [root@liu homework8]# bash 13.sh user2
    id total is 3027
    [root@liu homework8]# bash 13.sh user2 user4
    id total is 6056

    

14、写一个脚本

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
     #!/bin/bash
     #
     declare  -i dir_sum=0
     declare  -i file_sum=0
     if  [ $ # -eq 0 ];then
         echo  "Usage:$0 dir_name..."
     fi
     for  list  in  $*; do
         if  [ ! -d $list ]; then
         echo  "$list is not a directory,please input directory name"  &&  exit  0
         fi
     done
     for  list1  in  $*; do
      for  list2  in  $( ls  $list1); do
       if  [ -d $list1/$list2 ]; then
         let  dir_sum++
        elif  [ -f $list1/$list2 ]; then
         let  file_sum++
        fi
       done
     done
     echo  "directory $dir_sum"
     echo  "file $file_sum"
    测试脚本:   
     [root@liu homework8] # bash 14.sh /etc/sysconfig/network-scripts/ /var/log/
     directory 11
     file  85
     [root@liu homework8] # bash 14.sh /tmp/ /root/
     directory 22
     file  19

15、写一个脚本

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     #!/bin/bash
     #
     if  [ $ # -ne 1 ];then
       echo  "Usage: $0 user_name"
       exit  0
     fi
     if  id  $1 &>  /dev/null ; then
       num=$( id  -u $1)
       if  [ $num -gt 500 ]; then
         echo  "$1 is common user"
       fi
     fi
脚本测试:
     [root@liu homework8] # bash 15.sh user5
     user5 is common user
     [root@liu homework8] # bash 15.sh testuser1
     testuser1 is common user
     [root@liu homework8] # bash 15.sh root
     [root@liu homework8] #

16、写一个脚本

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
     #!/bin/bash
     #
     declare  -i  sum =0
     fun_adduser(){
      if  [ $ # -lt 1 ];then
       return  2
       # 2: no arguemnets
      fi
      if  id  $1 &>  /dev/null ; then
        echo  "$1 is exists."  &&  return  1
      else
       useradd  $1 &&  echo  $1 |  passwd  --stdin $1 &>  /dev/null 
       [ $? - eq  0 ] &&  echo  "Add $1 is finished." 
       let  sum ++
       return  0
      fi 
     }
     for  in  {1..10}; do
       fun_adduser myuser$i
     done
     echo  "$sum users is added"
    测试脚本:
     [root@localhost scripttest] # bash 16.sh 
     Add myusers1 is finished.
     Add myusers2 is finished.
     Add myusers3 is finished.
     Add myusers4 is finished.
     Add myusers5 is finished.
     Add myusers6 is finished.
     Add myusers7 is finished.
     Add myusers8 is finished.
     Add myusers9 is finished.
     Add myusers10 is finished.
     10  users  is added

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
     #!/bin/bash
     #
     net= '192.168.137'
     declare  -i uphosts=0
     declare  -i downhosts=0
     for  in  {1..50}; do
       ping  -c 1 -w 1 $net.$i &>  /dev/null
      if  [ $? - eq  0 ]; then
       echo  -e  "\033[32m $net.$i is up.\033[0m"
       let  uphosts++
      else
       let  downhosts++
      fi
     done
     echo  "Up hosts: $uphosts."
     echo  "Down hosts: $downhosts."
测试脚本:
     [root@liu homework8] # bash 17.sh 
      192.168.137.1 is up.
      192.168.137.2 is up.
      192.168.137.30 is up.
      192.168.137.32 is up.
     Up hosts: 4.
     Down hosts: 46.

18、打印九九乘法表;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     #!/bin/bash
     #
     #九九乘法表
     for  in  $( seq  1 9); do
      for  in  $( seq  1 $j); do
       echo  -e -n  "${i}X${j}=$[$i*$j]\t"
      done
      echo
     done
     #echo参数:-e 表示输出特殊字符\t(tab);-n 表示不换行输出。
测试脚本:
     [root@liu homework8] # bash 18.sh 
     1X1=1    
     1X2=2    2X2=4    
     1X3=3    2X3=6    3X3=9    
     1X4=4    2X4=8    3X4=12    4X4=16    
     1X5=5    2X5=10    3X5=15    4X5=20    5X5=25    
     1X6=6    2X6=12    3X6=18    4X6=24    5X6=30    6X6=36    
     1X7=7    2X7=14    3X7=21    4X7=28    5X7=35    6X7=42    7X7=49    
     1X8=8    2X8=16    3X8=24    4X8=32    5X8=40    6X8=48    7X8=56    8X8=64    
     1X9=9    2X9=18    3X9=27    4X9=36    5X9=45    6X9=54    7X9=63    8X9=72    9X9=81