20240420_getopts脚本模板
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]
- 原文作者:Kid
- 原文链接:https://shuanglu.life/post/20240420_getopts%E8%84%9A%E6%9C%AC%E7%9A%84%E4%BD%BF%E7%94%A8/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。