首先,效果是这样的:
既可以处理短选项(-)又可以处理长选项(--)
[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脚本中调用、引用、包含另外一个脚本文件的两种方法的使用技巧和注意事项,需要的朋友参考一下 脚本 first (测试示例1) 问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 second (测试示例2) 方法二: 使用 . 脚本 second (测试示例3) source f
本文向大家介绍Shell脚本传参数方法总结,包括了Shell脚本传参数方法总结的使用技巧和注意事项,需要的朋友参考一下 一、接收固定长度的参数 空参数执行 传递2个参数执行 二、那如果还有参数怎么办呢?还要一个个加上来吗?答案是否定的 以下用法应该不陌生,就是直接执行脚本本身,没有附带任何参数,那么脚本讲抛出帮助信息.即怎么使用此脚本.见红字部分 代码如下 详细的执行过程如下 不传参数执行 传递3
本文向大家介绍详解shell中脚本参数传递的两种方式,包括了详解shell中脚本参数传递的两种方式的使用技巧和注意事项,需要的朋友参考一下 方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数,但是一般很少会超过
本文向大家介绍UNIX sh(Bourne Shell)脚本里面使用数组的两种方法,包括了UNIX sh(Bourne Shell)脚本里面使用数组的两种方法的使用技巧和注意事项,需要的朋友参考一下 sh 不像 bash 和 ksh 那样可以非常方便的定义和使用数组,但是可以通过其它方式来模拟数组。 【方法1】通过 set 命令和位置参数来模拟数组 【方法2】使用 eval 命令模拟数组 定义数组
问题内容: 我想将参数传递给它。 我已经习惯了这样做,,....但我要开始对其进行命名 问题答案: 有很多方法可以解析sh中的参数。Getopt很好。这是一个简单的脚本,可以手动解析内容: 运行示例如下: 请注意,由于脚本eval是由用户构造的字符串,因此它甚至不具有强大的鲁棒性,也没有向安全漏洞开放。它仅是作为一种可能的做事方式的示例。一种更简单的方法是要求用户在环境中传递数据。在bourne
问题内容: 关于这种事情有很多问题,但让我们想象一下,我们的目标是安装了getopt和getopts的通用Linux系统(不是我们将使用其中任何一种,但它们似乎很流行) 如何同时解析长参数(–example | –example简单选项)和短参数(-e | -esimple-example | -e简单示例) 问题答案: 您想使用多头和空头期权。工作代码示例: 注意,是先前定义的功能(未显示)。