zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    关于虚拟机断电导致的 generating /run/initramfs/rdsosreport.txt 问题优秀解决方案
    centos7 yum 阿里源
    startup.bat脚本启动tomcat时,cmd命令窗口闪现问题及Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 错误解决
    Linux 中 Fish Shell
    卸载mysql
    /bin/bash^M: 坏的解释器: 没有那个文件或目录
    elementUI 文本鼠标移入显示太长
    el-upload 手动上传文件
    vue-element-admin 打包测试环境报错
    vue 分页跳转页面详情,返回记住当前点击第几页
  • 原文地址:https://www.cnblogs.com/ccshi/p/13151763.html
Copyright © 2011-2022 走看看