• shell脚本应用练习(3)


    一、使用for循环语句的应用示例

    1、根据姓名列表批量的添加用户

    1)创建用户的列表文件

    [root@localhost ~]# vim /root/users.txt

    zhangsan

    lisi

    wangwu

    2)编辑批量添加用户的脚本

    [root@localhost ~]# vim uaddfor.sh

    #!/bin/bash

    ULIST=$(cat /root/users.txt)

    for UNAME in $ULIST

    do

       useradd $UNAME

       echo "123456" | passwd --stdin $UNAME &>/dev/null

    done

    给脚本赋予执行权限

    [root@localhost ~]# chmod 755 uaddfor.sh

    测试并确认执行结果

    [root@localhost ~]#./uaddfor.sh

    [root@localhost ~]# tail -3 /etc/passwd

    2、编辑批量删除用户的脚本

    [root@localhost ~]# vim udelfor.sh

    #!/bin/bash

    ULIST=$(cat /root/users.txt)

    for UNAME in $ULIST

    do

       userdel -r $UNAME &>/dev/null

       

    done

    给脚本赋予执行权限

    [root@localhost ~]# chmod a+x udelfor.sh

    测试并确认执行结果

    [root@localhost ~]#./udelfor.sh

    [root@localhost ~]# id zhangsan

    3、根据IP地址列表检查主机状态

    1)创建IP地址列表文件

    [root@localhost ~]# vim /root/ipadds.txt

    172.16.1.1

    172.16.1.111

    172.16.1.222

    192.168.10.10

    2)编辑循环检查各主机的脚本

    [root@localhost ~]# vim chkhosts.sh

    #!/bin/bash

    HLIST=$(cat /root/ipadds.txt)

    for IP in $HLIST

    do

       ping -c 3 -i 0.2 -W 3 $IP &> /dev/null

       if [ $? -eq 0  ]

       then

          echo "Host $IP is up."

       else

          echo "Host $IP is down."

       fi

    done

    [root@localhost ~]# chmod a+x chkhost.sh

    测试并确认执行结果

    [root@localhost ~]#./chkhosts.sh

    二、while循环语句

    1)批量添加用户脚本

    [root@localhost ~]# vim uaddwhile.sh

    #!/bin/bash

    PREFIX="stu"

    i=1

    while [ $i -le 20 ]

    do

        useradd ${PREFIX}$i

        echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null

        let i++

    done

    [root@localhost ~]# chmod a+x uaddwhile.sh

    测试并确认执行结果

    [root@localhost ~]#./uaddwhile.sh

    [root@localhost ~]# grep "stu" /etc/passwd | tail -3

    或者

    #!/bin/bash

    PREFIX="stu"

    i=1

    while [ $i -le 20 ]

    do

        useradd ${PREFIX}$i

        echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null

        i=`expr $i + 1`

    done

    [root@localhost ~]# chmod a+x uaddwhile.sh

    测试并确认执行结果

    [root@localhost ~]#./uaddwhile.sh

    [root@localhost ~]# grep "stu" /etc/passwd | tail -3

    2)批量删除用户脚本

    [root@localhost ~]# vim udelwhile.sh

    #!/bin/bash

    PREFIX="stu"

    i=1

    while [ $i -le 20 ]

    do

         userdel -r ${PREFIX}$i

         let i++

    done

    [root@localhost ~]# chmod a+x udelwhile.sh

    测试并确认执行结果

    [root@localhost ~]#./udelwhile.sh

    id stu20

    3)猜价格游戏

    [root@localhost ~]# vim pricegame.sh

    #!/bin/bash

    PRICE=$(expr $RANDOM % 1000)

    TIMES=0

    echo "商品实际价格范围为0-999,猜猜看是多少?"

    while true

    do

        read -p "请输入你猜测的价格数目:" INT

        let TIMES++

        if [ $INT -eq $PRICE ] ; then

            echo "恭喜你答对了,实际价格是 $PRICE"

            echo "你总共猜测了$TIMES "

            exit 0

        elif [ $INT -gt $PRICE  ] ; then

            echo "太高了!"

        else

            echo "太低了!"

        fi

    done

    [root@localhost ~]# chmod a+x pricegame.sh

    注意:linux中随机数的取值范围是0--32767,和什么数取余,取余后的最大数就是谁,不包含该数字

    测试并确认执行结果

    [root@localhost ~]#./pricegame.sh

    商品实际价格范围为0-999,猜猜看是多少?

    请输入你猜测的价格数目:500

    太高了!

    三、使用case分支语句

    1)编写检查用户输入的字符类型的脚本

    [root@localhost ~]# vim hitkey.sh

    #!/bin/bash

    read -p "请输入一个字符,并按Enter键确认:" KEY

    case "$KEY" in

      [a-z]|[A-Z])

          echo "您输入的是 字母."

          ;;

      [0-9])

          echo "您输入的是 数字."

          ;;

      *)

          echo "您输入的是 空格、功能键或者其他控制字符."

    esac

    [root@localhost ~]# chmod a+x hitkey.sh

    测试并确认执行结果

    [root@localhost ~]#./hitkey.sh

    请输入一个字符,并按Enter键:k

    您输入的是 字母 k.

    ......

    2)编写系统服务脚本

    [root@localhost ~]# vim myprog

    #!/bin/bash

    case "$1" in

    start)

       echo -n "正在启动sleep服务..." //echo -n  :不换行输出

       if sleep 7200 &

     then

          echo "ok"

       fi

       ;;

    stop)

       echo -n "正在停止sleep服务..."

       pkill "sleep" &> /dev/null

    echo "ok"

       ;;

    status)

       if pgrep "sleep" &> /dev/null ; then

          echo "sleep服务已经启动."

       else

          echo "sleep服务已经停止."

       fi

       ;;

    restart)

       $0 stop

       $0 start

       ;;

    *)

       echo "用法:$0 {start|stop|status|restart}"

    esac

    [root@localhost ~]# chmod a+x myprog

    测试并确认执行结果

    [root@localhost ~]#./myprog start

    正在启动sleep服务...ok

    [root@localhost ~]#./myprog status

    sleep服务已经启动。

    [root@localhost ~]#./myprog stop

    正在停止服务sleep服务...ok

    [root@localhost ~]#./myprog reload

    用法:./myprog {start|stop|status|restart}

    myprog脚本添加为标准的系统服务

    [root@localhost ~]# vim myprog

    #!/bin/bash

    # chkconfig: - 90 10

    # description: Startup script for sleep Server

    case "$1" in

    start)

       echo -n "正在启动sleep服务..."

       if sleep 7200 &

     then

          echo "ok"

       fi

       ;;

    stop)

       echo -n "正在停止sleep服务..."

       pkill "sleep" &> /dev/null

    echo "ok"

       ;;

    status)

       if pgrep "sleep" &> /dev/null ; then

          echo "sleep服务已经启动."

       else

          echo "sleep服务已经停止."

       fi

       ;;

    restart)

       $0 stop

       $0 start

       ;;

    *)

       echo "用法:$0 {start|stop|status|restart}"

    esac

    [root@localhost ~]# cp myprog /etc/init.d/

    [root@localhost ~]# chkconfig --add myprog

    [root@localhost ~]# chkconfig --list myprog

  • 相关阅读:
    【MVC整理】1.使用 StructureMap 作为 ASP.NET MVC 的 DI 框架
    一个随机列表项算法
    轻量级IOC框架:Ninject
    解决“找不到请求的 .Net Framework 数据提供程序。可能没有安装”的问题
    Vcastr 2.2 flv 网络播放器 参数设置
    C#取汉字首字母
    IIS Express的安装与设置讲解
    清晰的图片缩略方案
    ssh远程连接ubuntu
    【Apache】在Apache中利用ServerAlias设置虚拟主机接收多个域名和设置域名泛解析
  • 原文地址:https://www.cnblogs.com/ccshi/p/13151763.html
Copyright © 2020-2023  润新知