getopts脚本模板

使用shell 进行一系列的参数时可以修改该脚本来完成一系列复杂的操作

脚本模板:

  1#!/bin/bash
  2# ------------------------------------------
  3# Filename: getopts_template.sh
  4# Version:   1.1
  5# Date: 2024/04/20
  6# Author: kid
  7# Email: shuanglulee@foxmail.com
  8# Website: shuanglu.life
  9# Description: template for getopts
 10# Copyright: 2024 kid
 11# License: GPL
 12# ------------------------------------------
 13# 定义帮助示例:
 14do_help(){
 15          echo "用法: $0 [-a|--along] [-b|--blong 参数值] [-c参数值|--clong 参数值] 文件名"
 16}
 17
 18echo "完成整理前完整参数: [$@]"
 19
 20if [ "$#" -eq 0 ]; then
 21        echo "错误:缺少参数."
 22        do_help
 23        exit 1
 24fi
 25
 26
 27# getops 进行构建参数处理,这里通过2>/dev/null 忽略了getopt如果入参不正确提示的:"invalid option -- "报错
 28# -n 表示当运行getopt 错误时候提示的名字是什么,-n 参数可以不加 $0 代表该运行脚本本身。 如果出错则会提示:"getopts05.sh: invalid option -- "
 29ARGS=$(getopt -n "$0"  -o ab:c::h --long along,blong:,clong::,help -- "$@" 2>/dev/null )
 30
 31# 当如果ARGS有构建参数错误时则退出,并打印帮助。
 32if [[ $? -ne 0 ]]; then
 33        echo "参数解析错误。"
 34        do_help
 35        exit 2
 36fi
 37
 38# 配置set来进行讲参数进行整理,打印整理之前的参数值
 39eval set -- "${ARGS}"
 40echo "使用'set --'整理后的参数: [$ARGS]"
 41
 42# 定义后续要制定的参数flag
 43argsB=""
 44argsC=""
 45
 46
 47# 循环遍历处理参数
 48while true;do
 49case "$1" in
 50        -a|--along)
 51                echo "A已运行"
 52                shift
 53                ;;
 54        -b|--blong)
 55                echo "B运行"
 56                argsB="$2"
 57                # 在当前参数往后移动2个
 58                shift 2
 59                ;;
 60        -c|--clong)
 61                echo "C运行..."
 62                # 针对-c的可选参数是否带参数进行额外的判断,判断是有参数还是没有额外参数
 63                case "$2" in
 64                        "")
 65                                echo "C选项,没有参数"
 66                                shift 2
 67                                ;;
 68                        *)
 69                                echo "C选项,参数是:$2"
 70                                argsC="$2"
 71                                shift 2
 72                                ;;
 73                esac
 74                ;;
 75        -h|--help)
 76                echo "help运行..."
 77                do_help
 78                shift
 79                ;;
 80        --)
 81        # 这里是终止循环的判断,表示已经没有任何选项可以执行了
 82                shift
 83                break
 84                ;;
 85        *)
 86                echo "没有该选项!"
 87                exit 1
 88        esac
 89done
 90
 91# -b | --blong 参数的实际动作写在这里:
 92if [ -n "$argsB" ] ;then
 93        echo "B参数:$argsB"
 94fi
 95
 96# -c | --clong 参数的实际动作写在这里:
 97# 每个参数的实际动作
 98if [ -n "$argsC" ] ;then
 99        echo "C参数:$argsB"
100fi
101
102#处理剩余的参数。
103echo "剩余的参数为:=[$@]"
104echo \$1=[$1]
105echo \$2=[$2]