shell中用含case语句来处理带参数的脚本

为什么要写一个用case语句的脚本来检测参数以及对应的值,
而不是使用 echo "执行的文件名: $0, 第一个参数为:$1, 第二个参数为:$2";

1)、当一个shell脚本的参数执行顺序以及数量不确定
2)、当只输入了参数名,但没有输入对应的值
3)、该脚本不止在终端通过这一条带参数的命令输入,还通过工具(Jenkins)来设置参数值来输入

1、介绍脚本执行格式:

本文中带参数的脚本的执行格式例如为

SCRIPT.sh -para1 value1 -para2 value2

当遇到-paraX 说明是参数名,后面不带-的就是前一个参数名对应的参数值

shift 命令用于对参数的左移
通常用于在不清楚传入参数个数的情况下依次遍历每个参数然后进行相应处理

2、脚本如下:

#!/bin/sh

#首先给要接收的参数的值设置对应的变量来接收值
#这里先全部设置了默认值flag_0  (为什么要设置默认值,因为不设置默认值时变量值为空,同时有的参数是可以不设置参数值的)
#如下,该脚本允许最多传4组参数
name=flag_0
branch_name=flag_0
version_name=flag_0
path_name=flag_0

#用于告诉用户要传入的参数的结构以及具体参数名
usage()
{
        echo "usage()"
        echo "The executed format:"
        echo "$0 -name xxx -branch xxx -version xxx -path xxx"
        exit 1
}

#用于显示参数名以及对应的参数值
show_parameters()
{
        echo ""
        echo "show_parameters()"
        echo name=$name
        echo branch_name=$branch_name
        echo version_name=$version_name
        echo path_name=$path_name
        echo ""
}

echo "Total $# parameters"

#如果参数数量不为0,再对各个参数进行判断
if [ $# != 0 ]; then
    #当第一个参数($1)不为空, 则用case来遍历第一个参数
    while [ n$1 != n ]; do

        #如果第一个参数为 -h/-help 或 -name 或 -branch 或 -version 或 -path  则继续判断
        case $1 in
        #如果第一个参数为 -h/-help, 则调用usage
        -h | -help )
                usage
        ;;
        #如果第一个参数为 -name
        -name )
                if [[ $2 == -* ]]; then
                        echo "No name parameter value"

                else
                        name=$2
                        echo name=$name
                        shift
                fi
        ;;
        -branch )
                if [[ $2 == -* ]]; then
                        echo "No branch parameter value"

                else
                        branch_name=$2
                        if [[ $branch_name == master || $branch_name == dev || $branch_name == feature* ]]; then
                                echo "branch_name value is valid "
                        else
                                echo branch_name must be master or dev or feature*
                                exit 2
                        fi
                        echo branch_name=$branch_name
                        shift
                fi
        ;;
        -version )
                if [[ $2 == -* ]]; then
                        echo "No version parameter vlue"
                else
                        version_name=$2
                        if [[ "$version_name" =~ ^[0-9a-zA-Z._]+$ ]]; then
                                echo version_name format is right
                        else
                                echo version_name=$version_name format error
                                exit 3
                        fi
                        echo version_name=$version_name
                        shift
                fi
        ;;


        -path )
                if [ n$2 != n  ]; then
                        if [[ $2 == -* ]]; then
                                echo "No path parameter value"
                        else
                                path_name=$2
                                if [ ! -d "$path_name" ]; then
                                        echo "directory is not exist,path_name=$2"
                                        exit 4
                                fi
                                echo path_name=$path_name
                                shift
                        fi
                fi
        ;;
        * )
            echo invalid argument $1
            usage
        esac
        shift
    done
fi

#获取当前的时间戳的方法
if [ $version_name == flag_0 ]; then
    version_name=$(date +%Y%m%d%H%M)
fi
show_parameters

3、脚本执行:

3.1 执行时带全部参数

./Test_case_parametered.sh -name Sunny -branch feature3 -version 1.5.2 -path /home_local/tester

执行结果:

Total 8 parameters

show_parameters()
name=Sunny
branch_name=feature3
version_name=1.5.2
path_name=/home_local/tester

3.2 执行时不带任何参数

./Test_case_parametered.sh

执行结果:

Total 0 parameters

show_parameters()
name=flag_0
branch_name=flag_0
version_name=202304231957
path_name=flag_0

3.3 执行时只有部分参数

./Test_case_parametered.sh -version 55.uu8

执行结果:

Total 2 parameters
version_name format is right
version_name=55.uu8

show_parameters()
name=flag_0
branch_name=flag_0
version_name=55.uu8
path_name=flag_0

3.4 执行时输入错误参数名

./Test_case_parametered.sh -username zhou

执行结果:

Total 2 parameters
invalid argument -username
usage()
The executed format:
./Test_case_parametered.sh -name xxx -branch xxx -version xxx -path xxx

3.5 执行时输入不合法参数值

./Test_case_parametered.sh -branch dev33

执行结果:

Total 2 parameters
branch_name must be master or dev or feature*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值