mysql linux php 开源 云计算 shell 程序员 Ubuntu wordpress 编程 Android google java Firefox Python nginx apache Windows 微软 centos

全新Linux+Python高端運維班-Linux 網絡基礎管理,包管理,bash腳本練習

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

延伸阅读

    评论