为什么要写一个用case语句的脚本来检测参数以及对应的值,
而不是使用 echo "执行的文件名: $0, 第一个参数为:$1, 第二个参数为:$2";
1)、当一个shell脚本的参数执行顺序以及数量不确定
2)、当只输入了参数名,但没有输入对应的值
3)、该脚本不止在终端通过这一条带参数的命令输入,还通过工具(Jenkins)来设置参数值来输入
带case语句的shell脚本
- 1、介绍脚本执行格式:
- 2、脚本如下:
- 3、脚本执行:
- 3.1 执行时带全部参数
- 3.2 执行时不带任何参数
- 3.3 执行时只有部分参数
- 3.4 执行时输入错误参数名
- 3.5 执行时输入不合法参数值
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=$nameecho branch_name=$branch_nameecho version_name=$version_nameecho path_name=$path_nameecho ""
}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 == -* ]]; thenecho "No name parameter value"elsename=$2echo name=$nameshiftfi;;-branch )if [[ $2 == -* ]]; thenecho "No branch parameter value"elsebranch_name=$2if [[ $branch_name == master || $branch_name == dev || $branch_name == feature* ]]; thenecho "branch_name value is valid "elseecho branch_name must be master or dev or feature*exit 2fiecho branch_name=$branch_nameshiftfi;;-version )if [[ $2 == -* ]]; thenecho "No version parameter vlue"elseversion_name=$2if [[ "$version_name" =~ ^[0-9a-zA-Z._]+$ ]]; thenecho version_name format is rightelseecho version_name=$version_name format errorexit 3fiecho version_name=$version_nameshiftfi;;-path )if [ n$2 != n ]; thenif [[ $2 == -* ]]; thenecho "No path parameter value"elsepath_name=$2if [ ! -d "$path_name" ]; thenecho "directory is not exist,path_name=$2"exit 4fiecho path_name=$path_nameshiftfifi;;* )echo invalid argument $1usageesacshiftdone
fi#获取当前的时间戳的方法
if [ $version_name == flag_0 ]; thenversion_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 parametersshow_parameters()
name=Sunny
branch_name=feature3
version_name=1.5.2
path_name=/home_local/tester
3.2 执行时不带任何参数
./Test_case_parametered.sh
执行结果:
Total 0 parametersshow_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.uu8show_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*