首先,效果是这样的:
既可以处理短选项(-)又可以处理长选项(--)

[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命令了:

# 定义命令执行选项
# 参数后面不加冒号(a)表示后面不接参数 eg:-a,--append
# 参数后面加冒号(a:)表示后面一定要接参数 eg:-d 20201224,--date 20201224
# 参数后面加两个冒号(a::)表示后面参数可接可不接
if ! ARGS=$(getopt -o aom:d:s:e:h --long append,overwrite,method:,date:,startdate:,enddate:,help -n "$0" -- "$@"); thenecho "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; docase "$1" in-a|--append)mode='append'shift;;-o|--overwrite)mode='overwrite'shift;;-m|--method)method=$2shift 2;;-d|--date)date=$2shift 2;;-s|--startdate)startdate=$2shift 2;;-e|--enddate)enddate=$2shift 2;;--)shiftbreak;;-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脚本使用两个横杠接收外部参数相关推荐

  1. linux命令2个杠是什么意思,shell脚本使用两个横杠接收外部参数的方法

    首先,效果是这样的: 既可以处理短选项(-)又可以处理长选项(--) [developer@hadoop-cluster-manager shell]$ ./demo.sh --help sqoop程 ...

  2. Shell脚本对比两个文本文件找出不同行的2个方法分享

    这篇文章主要介绍了Shell脚本对比两个文本文件找出不同行的2个方法分享,本文分别使用comm命令法.grep命令法实现,需要的朋友可以参考下 亲自实验过的方法如下: 第一种:comm命令法 命令如下 ...

  3. shell脚本的两种执行方式区别举例

    1. sh及bash方式执行: 第一个字母l:看来sh只是bash的一个链接. 要了解区别,先建立一个实验脚本如下: echo 'udir=`pwd`' >testsource.sh #符号为单 ...

  4. linux脚本多个条件比较大小,shell脚本-比较两个整数大小

    开发shell脚本分别实现以脚本传参以及read读入的方式比较2个整数大小.用条件表达式(禁止if)进行判断并以屏幕输出的方式提醒用户比较结果.注意:一共是开发2个脚本.当用脚本传参以及read读入的 ...

  5. 运行 Shell 脚本有两种方法:

    1.作为可执行程序 将上面的代码保存为 test.sh,并 cd 到相应目录: chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 注意,一定要写成 ./tes ...

  6. shell脚本截取两个关键字之间的字符

    $ mount | grep /media/xhx /dev/sda1 on /media/xhx/UBUNTU 20_0 type vfat (rw,nosuid,...) /dev/mmcblk0 ...

  7. Linux shell脚本附带选项(参数传递及接收)

  8. python 接收外部参数_python 接收处理外带的参数方法

    python 接收处理外带的参数方法 在执行python 代码的时候,有时候需要传递外面的参数进行处理 这个该怎么实现呢? 需要一个模块 from sys import argv 当然也可以直接只导入 ...

  9. java源码如何启动脚本_使用Shell脚本如何启动/停止Java的jar程序

    本文介绍如何使用Shell脚本来开启和停止jar程序的后台运行,以及如何实现out大文件的切分.另外,补充一些后台运行的小知识. 启动脚本:start_upload.sh #!/bin/sh nohu ...

  10. php写一个shell脚本文件格式,一篇文章学会——shell脚本编写

    用了caffe有一段时间了,感觉自己写shell脚本的能力有待提高,特地从菜鸟笔记处系统的看了一遍,其实学习基础就可,内容也不多,我就不总结了.把网站上的内容用markdown重新编辑了一下,各位可以 ...

最新文章

  1. requests模块--python发送http请求
  2. 调试代码 2017-03-13
  3. struts2总体介绍
  4. 互联网1分钟 |1220
  5. 大文件拆分小文件求top_将文件拆分为流
  6. SNMP学习之结构体snmp_secmod_def
  7. mt4交易软件云服务器_MT4软件使用教程1常见货币对交易图表类型
  8. startService和onBinderService混合开发音乐播放器
  9. jquery java aes_[代码全屏查看]-java、js之间使用AES加密通信数据
  10. 第八届蓝桥杯第十题 k倍区间
  11. linux下组管理命令详解
  12. Redis 禁止使用耗时命令和时间复杂度为O(n)的命令
  13. Struts2.0 + Spring2.5 + Hibernate3.3开发环境的配置(1)
  14. 不能使用泛型的形参创建对象_泛型就这么简单
  15. hackerrank初级篇之Plus Minus
  16. js 实现当有省略号时,显示title,无省略号不显示title
  17. 在职读研难,社科院与杜兰大学金融管理硕士项目让读研多了一种选择
  18. Xamarin 初学,设计一个简单的美景展示App(只实现了部分功能)
  19. php无法访问_php网站无法访问可能是什么原因
  20. Android控制wifi开关

热门文章

  1. 机器人——人类的终极进化
  2. 树莓派CM4+CM IO上手,查看DDR和eMMC容量
  3. 正则表达式,判断输入的字符串是否只包含数字、字母、下划线三种随机组合,字符串可以包含一个或多个空格但头尾不能为空格,全为空格组成等限定字符串格式规则
  4. 花间一壶酒之杂文杂谈
  5. Android客户端支付宝支付
  6. 用Todd Motto揭秘JavaScript
  7. android 语音助手开发,Kotlin开发AI语音助手App 先人一步抓紧移动端AI时代发展机会...
  8. 玩转数据可视化之R语言ggplot2:(四)单一基础几何图形绘制
  9. RK3399平台开发系列讲解(USB网卡)5.47、USBNET驱动模型
  10. FA_MASS_ADDITIONS Interface Table 资产成批增加