shell脚本使用两个横杠接收外部参数的方法

 更新时间:2020年12月24日 11:17:30   作者:是泛小舟啊?  
这篇文章主要介绍了shell脚本使用两个横杠接收外部参数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

首先,效果是这样的:

既可以处理短选项(-)又可以处理长选项(--)

[developer@hadoop-cluster-manager shell]$ ./demo.sh --help
sqoop程序开始运行: demo.sh
Usage: ./demo.sh [options]
 
Options:
 --append, -a:   追加导入(默认为追加模式)
 --overwrite, -o: 覆盖导入 
 
 --method, -m:   single-单日导入
          interval-区间导入
          all-全表导入
 
 --date, -d:    单日导入,某一日期数据(格式为yyyymmdd)
 
 --startdate, -s: 区间导入,开始日期
 --enddate, -e:  区间导入,结束日期
 
 --help, -h     帮助

shell脚本接外部参数有一种很简单的办法,在脚本中使用$0,$1,$2...指代执行脚本时传入的第几个参数($0是脚本名)。

但是,这样做毕竟不够优雅,

另一种方法shell脚本内使用getopts命令,只可以接短选项(eg:-d,-s,-h),很方便,比较简单,可以自己去搜一搜。

但如果想要达成上面这种效果同时支持长选项和短选项(eg:--date,-d,--startdate,-s,--help,-h),

就只能使用getopt命令了:

# 定义命令执行选项
if ! ARGS=$(getopt -o aom:d:s:e:h --long append,overwrite,method:,date:,startdate:,enddate:,help -n "$0" -- "$@"); then
  echo "Terminating..."
  echo -e "Usage: ./$SCRIPT_NAME [options]\n"
  echo -e "Options:\n --append, -a:   追加导入(默认为追加模式)\n --overwrite, -o: 覆盖导入 \n\n --method, -m:   single-单日导入\n          interval-区间导入\n          all-全表导入\n\n --date, -d:    单日导入,某一日期数据(格式为yyyymmdd)\n\n --startdate, -s: 区间导入,开始日期\n --enddate, -e:  区间导入,结束日期\n\n --help, -h     帮助"
  exit 1
fi
 
# 将规范化后的命令行参数分配至位置参数($1,$2,...)
# The -- ensures that whatever options passed in as part of the script won't get interpreted as options for set, but as options for the command denoted by the $progname variable.
eval set -- "${ARGS}"
 
# 接受执行选项;赋值给变量
while true; do
 case "$1" in
  -a|--append)
   mode='append'
   shift
   ;;
  -o|--overwrite)
   mode='overwrite'
   shift
   ;;
  -m|--method)
   method=$2
   shift 2
   ;;
  -d|--date)
   date=$2
   shift 2
   ;;
  -s|--startdate)
   startdate=$2
   shift 2
   ;;
  -e|--enddate)
   enddate=$2
   shift 2
   ;;
  --)
   shift
   break
   ;;
  -h|--help)
   echo -e "Usage: ./$SCRIPT_NAME [options]\n"
   echo -e "Options:\n --append, -a:   追加导入(默认为追加模式)\n --overwrite, -o: 覆盖导入 \n\n --method, -m:   single-单日导入\n          interval-区间导入\n          all-全表导入\n\n --date, -d:    单日导入,某一日期数据(格式为yyyymmdd)\n\n --startdate, -s: 区间导入,开始日期\n --enddate, -e:  区间导入,结束日期\n\n --help, -h     帮助"
   exit 0
   ;;
  ?)
   echo "missing options, pls check!"
   exit 1
   ;;
 esac
done

到此这篇关于shell脚本使用两个横杠接收外部参数的文章就介绍到这了,更多相关shell脚本接收参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • shell 使用指定的分割符来分割字符串的方法

    shell 使用指定的分割符来分割字符串的方法

    这篇文章主要介绍了shell 使用指定的分割符来分割字符串的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 在Linux中复制文件夹的命令详解

    在Linux中复制文件夹的命令详解

    这篇文章给大家介绍了Linux的基础操作,如何在 Linux 中复制文件夹,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • linux shell编程指南之字符串与数组

    linux shell编程指南之字符串与数组

    这篇文章主要给大家介绍了关于linux shell编程指南之字符串与数组的相关资料,字符串与数组是Shell编程中常用的数据类型,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Linux Shell任务控制的实现示例

    Linux Shell任务控制的实现示例

    本文主要介绍了Linux Shell任务控制的实现示例,包括向脚本发送信号、修改脚本的优先级以及在脚本运行时从暂停切换到运行模式,感兴趣的可以了解一下
    2024-01-01
  • shell函数内调用另一个函数(不带返回值和带返回值)

    shell函数内调用另一个函数(不带返回值和带返回值)

    本文主要介绍了shell函数内调用另一个函数(不带返回值和带返回值),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • shell脚本中常见的一些特殊符号和作用详解

    shell脚本中常见的一些特殊符号和作用详解

    这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下
    2014-06-06
  • 隐藏shell脚本内容的工具 shc详解

    隐藏shell脚本内容的工具 shc详解

    本文主要介绍了隐藏shell脚本内容的工具 shc, 虽然它加密的安全性不高,但是我们平常可以把它作为一个shell脚本代码隐藏和混淆工具来使用,对shell脚本隐藏相关知识感兴趣的朋友一起看看吧
    2021-11-11
  • Linux中执行shell脚本的4种方法总结

    Linux中执行shell脚本的4种方法总结

    这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下
    2014-08-08
  • shell脚本一键同时推送代码至github和gitee的解决办法

    shell脚本一键同时推送代码至github和gitee的解决办法

    这篇文章主要介绍了shell脚本一键同时推送代码至github和gitee的解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • shell实现数字打印从100到200的数

    shell实现数字打印从100到200的数

    按顺序打印从100到200的数的shell脚本,需要的朋友可以参考下
    2013-02-02

最新评论