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

2016全新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]

               S 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

延伸阅读

评论