zoukankan      html  css  js  c++  java
  • shell脚本编程基础之case语句

    基础简介

    脚本编程分为:

    面向过程          选择结构:if语句,单分支、双分支、多分支;case语句
            控制结构:顺序结构(默认)   
                     循环结构:for、while、until
    面向对象
    

    case语句结构

    case VAR_NAME in
    var_value1)           #value被当做字符一个一个进行比较的;可以使用a-z,A-Z,0-9,[abc]
      statement1
      ...
      ;;
    var_value2)
      statement2
      ...
      ;;
    *)
      statement
      ...
      ;;
    esac
    

    case示例

    Example1:
    #!/bin/bash
    case $1 in
    'start')
       echo "start service...."
       ;;
    'stop')
       echo "stop service...."
       ;;
    'restart')
       echo "restart service....."
       ;;
    'status')
       echo "Running...."
       ;;
    *)
       echo "`basename $0` (start|stop|restart|status)"     #`basename $0` 表示脚本本身名
       ;;
    esac
    当$1参数值为上面4个中的一个时,执行每个字符下的语句;如果上面哪个字符都不匹配,则执行 *) 下的语句
    
    Example2:
    #!/bin/bash
    ADD=0
    DEL=0
    DEBUG=0
    for i in `seq $#`;do
    case $1 in
    -v|--verbose)
       DEBUG=1         #输入指定字符,设置变量值,并且使用shift,把当前的$1踢掉,$2变为$1,$3变为$2;这样方便执行循环,这样case可以一直判断$1
       shift
       ;;
    -h|--help)
       echo "Usage: `basename $0` -v|--verbose --add USER_LIST --del USER_LIST -h|--help"
       exit 7
       ;;
    --add)
       ADD=1
       ADDUSER=$2
       shift
       ;;
    --del)
       DEL=1
       DELUSER=$2     #此位置变量指定需要删除或者添加的用户名
       shift
       ;;
    *)
       exit 8               #上面都不匹配,执行此条,防止一直循环判定不匹配的$1
       ;;
    esac
    
    if [ $ADD -eq 1 ];then
       for USER in `echo "$ADDUSER"|sed -n 's/,/ /gp'`;do    #取出用户名作为循环的列表
           if id $USER &>/dev/null;then
               [ $DEBUG -eq 1 ] && echo "$USER exists"    #如果执行脚本时添加了-v,则用户存的话进行打印提示信息,不添加-v参数则不进行打印
           else
               useradd $USER
               [ $DEBUG -eq 1 ] && echo "create $USER finished"    #如果执行脚本时添加了-v参数,则创建完用户进行提示,不添加参数则不打印提示信息
           fi
       done
    fi
    
    if [ $DEL -eq 1 ];then         #如果执行脚本添加了--del参数,则上面的DEL变量值为1,值为1就进行下面的循环
       for USER in `echo "$DELUSER"|sed -n 's/,/ /gp'`;do   #取出$2中的用户名
           if id $USER &>/dev/null;then
               userdel -r $USER
               [ $DEBUG -eq 1 ] && echo "delete $USER finished"    #执行脚本时添加了-v参数,则显示相关提示信息,反之则不显示
           else
               [ $DEBUG -eq 1 ] && echo "$USER not exists"   #执行脚本时添加-v参数,把DEBUG变量值变为1,则此条判断成立,执行后面的语句
           fi
       done
    fi
    
    done 
    如果前面加上-v则显示添加过程,不添加-v就不显示,--add user1,xxxxx进行添加用户;--del user1,txwxx删除这些用户,-h查看帮助
  • 相关阅读:
    独立构件风格之C2风格
    Mysql远程授权报语法错误
    Vuforia3D模型上传
    Hololens Vuforia 物体识别
    C盘无损分区
    MRTK 当进入某个物体时调用的函数
    Java实现斐波那契数列的两种方法
    Leetcode452. 用最少数量的箭引爆气球(排序+贪心)
    Java对二维数组排序
    帮你理清js的继承
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/12004544.html
Copyright © 2011-2022 走看看