当前位置: 首页 > news >正文

linux bash shell的getopt以及函数用法小记

  • getopt 长选项 短选项 可选参数
  • while
  • case
  • if
  • basename
  • 函数
  • 变量
  • shift
  • read

实现功能描述:

1. 实现可选参数传入 -c 或 --clearBuild。

2. 用shell脚本来实现选择,make时是否clean。

3. 可以打印用法帮助 和 作者信息。

#!/bin/bash

# sh函数定义 *************************** 
usage()
{
    sh_name=$(basename $1);
    # sh_name='basename $1';  #或者这个
    echo "
    ---------------
    用法:      $sh_name [选项] <(可选) -c >  <(可选) --clearBuild >
    命令行选项:
            -c  或 --clearBuild     默认: 0,
                                    表示是否清除make build的内容,数值为1表示清理,为0表示直接构建
    可选选项:
            -h  或 --help           打印帮助信息
            -a  或 --author         打印作者信息
    ---------------
    "
    exit 1;
}
author()
{
    sh_name=$(basename $1);
     # sh_name='basename $1';  #或者这个 
echo "
    ---------------
    脚本:  $sh_name 

    作者:  WJH    
    ---------------
    "
    exit 1;
}

fun1_make()
{
    if [ "$1" = "clear" ] ; then
        # echo '执行清理并构建文件';
        echo 'in fun1_make(): 先clean 然后 make';
        # your cmd .....
    else
        # echo "不清除已经构建好的文件"
        echo "in fun1_make(): 直接make"
        # your cmd .....
    fi
}

# sh变量定义与接收 *************************** 


# 输入指令
parameters=$(getopt -a -o c::ha -l clearBuild::,help,author -n "$0" -- "$@")
# echo "原始参数origin param is $@"

if [ $? != 0 ]; then
    echo "脚本解析失败..."; exit 1;
fi
# set命令将规范化后的命令参数分配到位置参数 $1 $2上面
eval set  -- "${parameters}"
# echo "规范后参数formatetd parameters=[$@]"
 
# sh识别输入的选项·参数 *************************** 
while true; 
do
    case "$1" in
    -c | --clearBuild)
        case "$2" in
        "") echo "选项 --clearBuild 无参数";    
            clearBuild=${clearBuild:=1};  #赋默认值
            shift 2;  # 可选参数仍有空参数,需要shift 2, 
            ;;
        *) echo "选项 --clearBuild 参数为:$2";  clearBuild=$2;  
            shift 2;
            ;;
        esac
        ;;
    -h|--help)
        usage $0 ;
        ;;
    -a|--author)
        author $0 ;
        ;;
    --)
        echo "clearBuild 默认值 1, clearBuild 现在数值:$clearBuild"; # 默认值见 68行
        echo "-----------------";  shift 1; break; 
        ;;
    *)
        echo "Internal error!!!";  exit 1 ;
        ;;
    esac
done

# sh业务逻辑 *************************** 

# 比较字符串是否相等用 =, 并在两边留空格
# 比较数字用 -eq -gt -lt 等,分别为 equal; greater than; less than;等
if [ "$clearBuild" = "1" ] ; then  # 输入了 选项时 或 可选参数时  
    echo '>>>执行清理,然后构建';
    fun1_make clear;
    # your cmd .....

elif [ "$clearBuild" = "0" ] ; then # 输入了 选项时 或 可选参数时 
    echo ">>>直接构建"
    fun1_make direct_build;
    # your cmd ..... 
    
else                                # 未输入 选项时 
    read -p '未输入 选项时:
    输入clear 确认清除并重新构建; 输入不为clear,直接构建  : ' tmp2
    if [ "$tmp2" = "clear" ] ; then
        echo ">>>执行清理,然后构建";
        fun1_make $tmp2;
        # your cmd ..... 
    else 
        echo ">>>直接构建"
        fun1_make $tmp2;
        # your cmd .....
    fi
 fi

 echo "-----------------";

参考文章

1.设计shell脚本选项:getopt - 骏马金龙 - 博客园 (cnblogs.com)

2.081_扩展篇_Shell编程(七)_函数(二)_自定义函数_哔哩哔哩_bilibili

3.Linux——shell脚本的传参方式 - moutory - 博客园 (cnblogs.com) 

相关文章:

  • 携程基于Jira Cloud的敏捷项目管理实践
  • EXCEL VBA获取幸运数字号码
  • Sentinel降级操作
  • 数据预处理技术之数据归一化
  • k8s中netty服务器容器tcp连接数量优化
  • Sentinel-1 扩展时序注释数据集 (ETAD)的查询和下载
  • Android 基于Fragment的权限封装
  • ASP.NET Core NE8实现HTTP Upgrade和HTTP CONNECT代理服务器
  • php/js:实现几秒后进行页面跳转
  • 【软考中级】3天擦线过软考中级-软件设计师
  • 使用vscode查bug
  • 几款提高开发效率的Idea 插件
  • 力扣题目训练(1)
  • c++ class总结
  • 微认证 openEuler社区开源贡献实践
  • 头歌C语言递归函数、嵌套函数
  • SpringBoot整合ElasticSearch实现分页查询
  • 【Python】01快速上手爬虫案例一
  • JVM-初始JVM
  • cmd_to_robot 讨论及 G29 控制优化
  • 家电维修担心遇“李鬼”?上海推动“物业+专业服务”进社区
  • “一节课、两小时”,体育正在回归“C位”
  • 习近平会见缅甸领导人敏昂莱
  • 方正证券总裁何亚刚到龄退休,54岁副总裁姜志军接棒
  • 上海“电子支付费率成本为0”背后:金融服务不仅“快”和“省”,更有“稳”和“准”
  • 古埃及展进入百天倒计时,闭幕前168小时不闭馆