usage()
{
  echo "\nUSAGE:\n"
  echo "PmActivityReport.sh\t-type\t<latency|activity>\t\t\t(Mandatory)\t/*Report type.*/\n"
  echo "\t\t\t-ne\t<RNC-IN|RNC-AN|RNC-CN|BTS|ALL>\t\t(Optional)\t/*Ne type.*/\n"
  echo "\t\t\t-from\t<YYYY/MM/DD-HH:00>\t\t\t(Optional)\t/*Begin time.*/\n"
  echo "\t\t\t-to\t<YYYY/MM/DD-HH:00>\t\t\t(Optional)\t/*End time.*/\n"
  echo "\t\t\t-o\t<>\t\t\t\t\t(Optional)\t/*Output file name.*/\n"
  echo "\nNOTE:\n"
  echo "The default value of the ne type is \"ALL\"."
  echo "The default value of the output file name is \"latencyReport.txt\" or \"activityReport.txt\", depending on the report type."
  echo "Time must be given in a strict format: YYYY/MM/DD-HH:MM. Only full time is allowed, and the minutes can not be set different from \"00\".\n"
}

if [ $# -lt 2 ]
then
  usage
else
  reportType="UNKNOWN"
  neType="ALL"
  fromTime="UNKNOWN"
  toTime="UNKNOWN"
  output="UNKNOWN"
  totalPara=$#
  para=1
  paraIsValid=1
  while [ $para -le $totalPara ]
  do
  case "$1" in
    -type)
         if [ "$2" = "latency" -o "$2" = "activity" ]
         then
           reportType=$2
         else
           echo "Wrong parameter for -type!"
           paraIsValid=0
         fi
         ;;
   
    -ne)
         if [ "$2" = "RNC-IN" -o "$2" = "RNC-AN" -o "$2" = "RNC-CN" -o "$2" = "BTS" -o "$2" = "ALL" ]
         then
           neType=$2
         else
           echo "Wrong parameter for -ne!"
           paraIsValid=0
         fi
         ;;
   
    -from)
         timeIsValid=`echo $2 | grep -c [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]-[0-9][0-9]:00$`
         if [ $timeIsValid -eq 1 ]
         then
           Year=`echo $2 | cut -c1-4`
           Month=`echo $2 | cut -c6-7`
           Day=`echo $2 | cut -c9-10`
           Hour=`echo $2 | cut -c12-13`
           if [ $Month -ge 13 ]
           then
             echo "Wrong parameter for -from! Please check the month."
             timeIsValid=0
           fi
           if [ $Day -ge 32 ]
           then
             echo "Wrong parameter for -from! Please check the day."
             timeIsValid=0
           fi
           if [ $Hour -ge 25 ]
           then
             echo "Wrong parameter for -from! Please check the hour."
             timeIsValid=0
           fi
           if [ $timeIsValid = 1 ]
           then
             timeFrom=$2
           else
             paraIsValid=0
           fi
         else
           echo "Wrong parameter format for -from!"
           paraIsValid=0
         fi
         ;; 
        
    -to)
         timeIsValid=`echo $2 | grep -c [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]-[0-9][0-9]:00$`
         if [ $timeIsValid -eq 1 ]
         then
           Year=`echo $2 | cut -c1-4`
           Month=`echo $2 | cut -c6-7`
           Day=`echo $2 | cut -c9-10`
           Hour=`echo $2 | cut -c12-13`
           if [ $Month -ge 13 ]
           then
             echo "Wrong parameter for -to! Please check the month."
             timeIsValid=0
           fi
           if [ $Day -ge 32 ]
           then
             echo "Wrong parameter for -to! Please check the day."
             timeIsValid=0
           fi
           if [ $Hour -ge 25 ]
           then
             echo "Wrong parameter for -to! Please check the hour."
             timeIsValid=0
           fi
           fromTimeValue=`echo $timeFrom | sed -e "s/\///g" | sed -e "s/-//" | sed -e "s/://"`
           toTimeValue=`echo $2 | sed -e "s/\///g" | sed -e "s/-//" | sed -e "s/://"`
           if [ $toTimeValue -le $fromTimeValue ]
           then
             echo "Wrong parameter for -to! The time for -to is not later than that for -from."
             timeIsValid=0
           fi
           if [ $timeIsValid = 1 ]
           then
             timeTo=$2
           else
             paraIsValid=0
           fi
         else
           echo "Wrong parameter format for -to!"
           paraIsValid=0
         fi
         ;;
   
    -o)
         if [ "$2" != "" ]
         then
           output=$2
         else
           echo "Wrong parameter for -o!"
           paraIsValid=0
         fi
         ;;
     
    *)                
         echo "Bad option \"$1\"."
         paraIsValid=0
         ;;
  esac
   
    para=`expr $para + 2`
   
    shift
    if [ $# -gt 1 ]
    then
      shift
    fi
  done
  if [ $paraIsValid -eq 0 -o $reportType = "UNKNOWN" ]
  then
    usage
  else
   if [ $reportType = "latency" ]
   then
     output="latencyReport.txt"
   fi
   if [ $reportType = "activity" ]
   then
     output="activityReport.txt"
   fi
  fi
 
fi

shell脚本,主要是对输入参数检验的更多相关文章

  1. shell脚本编程-处理用户输入

    命令行参数 命令行参数:允许在运行脚本时向命令行添加数据值 如:$ ./addem 10 30 读取参数 bash shell会将一些称为位置参数的特殊变量分配给命令行输入的所有参数,甚至包括shel ...

  2. shell脚本中的交互式输入自动化

    shell中有时我们需要交互,但是呢我们又不想每次从stdin输入,想让其自动化,这时我们就要使shell交互输入自动化了. 1    利用重定向     重定向的方法应该是最简单的 例: 以下的te ...

  3. shell脚本,提示用户输入一个用户名,如果存在;显示用户UID和SHELL信息;否则,则显示无此用户;显示完成之后,提示用户再次输入;如果是quit则退出;

    [root@localhost wyb]# cat tishiuser.sh #!/bin/bash #提示用户输入一个用户名,如果存在:显示用户UID和SHELL信息:否则, #则显示无此用户:显示 ...

  4. shell脚本实现算术运算且输入的不能为非数字的值

    #!/bin/bash c= ] do echo "请输入第一个数" read a echo "请输入第二个数" read b ]* ]] && ...

  5. shell脚本read -t 超时输入测试

    [root@server0 shellStudy]# cat timeout.sh #!/bin/bash TIMEOUT=3 #超时间隔 echo "What is your name?& ...

  6. 《Linux命令行与shell脚本编程大全》第十一章 构建基本脚本

    11.1使用多个命令 $date;who   //  命令列表,加入分号就可以,这样会依次执行.参见5.2.1节 注意区分$(date;who),这个是进程列表,会生成一个子shell来执行 Shel ...

  7. 常用shell脚本

    [脚本1]打印形状打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash # 等腰三角形 read -p "Please input the length: " n ...

  8. 【转】干货分享-100个shell脚本

    本文用于记录学习和日常中使用过的shell脚本 [脚本1]打印形状 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash # 等腰三角形 read -p "Please i ...

  9. 如何使用zx编写shell脚本

    前言 在这篇文章中,我们将学习谷歌的zx库提供了什么,以及我们如何使用它来用Node.js编写shell脚本.然后,我们将学习如何通过构建一个命令行工具来使用zx的功能,帮助我们为新的Node.js项 ...

  10. Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

    Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...

随机推荐

  1. 5.6 函数y=Asin(ωx+φ)的图像和性质

    \({\color{Red}{欢迎到学科网下载资料学习 }}\) [基础过关系列]2022-2023学年高一数学上学期同步知识点剖析精品讲义(人教A版2019) \({\color{Red}{ 跟贵哥 ...

  2. iOS 数据持久化方案-Realm的使用小结

    一.Realm介绍 1.1.Realm是一个跨平台移动数据库引擎,支持iOS.OS X(Objective-C和Swift)以及Android,核心数据引擎C++打造,并不是建立在SQLite之上的O ...

  3. html5新标签 画布 canvas 替代了 flash

    绘制矩形边框,和填充不同的是绘制使用的是strokeRect, 和strokeStyle实现的 绘制路径 绘制路径的作用是为了设置一个不规则的多边形状态 路径都是闭合的,使用路径进行绘制的时候需要既定 ...

  4. Vnode 是什么 ,什么是虚拟DOM ?

    Vnode 是 JavaScript 对象,就是把标签结构的信息描述成js对象 : Vnode 的作用:通过 render 函数 将 template 描述成 Vnode ,然后通过一系列操作转换真实 ...

  5. docker容器中启动tomcat应用

    Dockerfile FROM tomcat:8.5.46-jdk8-openjdk-slim COPY ecs-console.war /usr/local/tomcat/webapps/ ENV ...

  6. 基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!

    前言 今天大姚给大家分享一款基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用:ZR.Admin.NET. 开源免费(基于MIT License开源协议).代码量少.学习简单. ...

  7. 云原生周刊:Cilium v1.16.0 发布|20240729

    开源项目 Cyclops Cyclops 是一个开源的开发工具,通过易于使用的用户界面简化了 Kubernetes,使其更易上手.不再需要使用 YAML 创建和配置 Kubernetes 清单,可以使 ...

  8. 云原生爱好者周刊:VMware Tanzu 社区办发布,无任何限制!

    云原生一周动态要闻: VMware Tanzu 推出社区版 Kubernetes Cluster API 1.0 版已生产就绪 Linkerd 2.11 发布 Cartografos 工作组推出云原生 ...

  9. OpenFunction 0.7.0 发布: OpenFunction Gateway、多语言及 Helm 安装支持

    OpenFunction 是一个开源的云原生 FaaS(Function as a Service,函数即服务)平台,旨在帮助开发者专注于业务逻辑的研发.在过去的几个月里,OpenFunction 社 ...

  10. GaussDB: db2->gaussdb 函数转换

    一.db2->gaussdb函数转换 问题描述:使用GaussDB替代DB2的方案,使用起来还是有些差别,做一下函数的映射转换.   DB2写法 GaussDB改写语法 日期函数 days(OU ...