首先,效果是这样的:

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

[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脚本接收参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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

  1. Linux命令每五分钟执行一次,Linux crontab 每5秒钟执行一次 shell 脚本 的方法

    Linux crontab 每5秒钟执行一次 shell 脚本 的方法 由于 Linux 的 crontab 的定时命令格式如下: minute hour day-of-month month-of- ...

  2. linux mysql清除缓存_案例:通过shell脚本实现mysql数据备份与清理

    导读 Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行,实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此 ...

  3. 【Linux命令】《鸟哥Linux基础》第十二章 学习shell脚本

    第十二章 学习shell脚本 通常利用shell脚本完成服务器的检测工作,不涉及大量运算. 12.1 简单shell脚本介绍 12.2 简单shell脚本练习 12.2.1 简单范例 范例1:永远的开 ...

  4. linux查看硬盘阵列卡信息命令,查看服务器RAID卡信息的SHELL脚本及MegaCLI命令介绍...

    目前维护的dDell服务器,大多使用的都是LSI的MegaRAID卡. 查看系统使用的什么RAID卡,可以使用以下命令:# dmesg |grep -i raid # cat /proc/scsi/s ...

  5. Linux复制文件到usb设备中,使用shell脚本实现USB设备的加载与文件复制

    使用shell脚本实现USB设备的加载与文件复制 在Linux操作系统中,如果插入一个USB设备,需要用mount挂载命令才能实现这个设备的加载,下面写一个USB设备挂载与文件复制的Shell程序,程 ...

  6. linux脚本怎么发送到桌面,如何在Linux上使用Zenity创建简单的图形Shell脚本

    Zenity使用单个命令为shell脚本添加了图形界面. Shell脚本是自动化重复任务的好方法,但是它们通常只限于终端 - Zenity将它们从终端中导出到桌面上. 我们已经介绍了过去的shell脚 ...

  7. Linux系统运维9个实用的shell脚本

    看到 9 个 shell 脚本范例,运维可以根据实际情况进行修改,9个 shell 脚本如下: 1.Dos 攻击防范(自动屏蔽攻击 IP) #!/bin/bash DATE=$(date +%d/%b ...

  8. Linux开发 安装JDK8、mysql8.0、shell脚本编写、Ubuntu安装 p4

    前面的笔记: Linux 学习笔记1 安装linux详细教程_linux系统 setting_O丶ne丨柒夜的博客-CSDN博客 Linux 学习笔记2 常用命令_O丶ne丨柒夜的博客-CSDN博客 ...

  9. Linux 平台下 RMAN 全备 和 增量备份 shell 脚本

    一. 一些准备知识 Oracle 分归档和非归档模式. 这两者的区别就是对redo log的处理.归档模式下,当一个redo log 写满之后,就会把这个redo log里的内容写入归档文件,等写完之 ...

最新文章

  1. 暑期集训5:并查集 线段树 练习题F:  HDU - 1166 ​​​​​​​
  2. apache-2.4.x 编译安装方法
  3. java面试题大合集(开发者必看二)
  4. 专注于网络安全的数据中心在莫斯科开通运营
  5. xaml与HTML相比较,还是太复杂
  6. Xcode中的-ObjC和-all_load
  7. solidity数据位置-memory,storage和calldata
  8. Java 核心系列教程
  9. 基于Ace Admin 的菜单栏实现
  10. 基于python的论文摘要怎么写_Python实现文章摘要的提取方式
  11. 固态硬盘SSD与机械硬盘HDD
  12. 开运魔法,晓腾叔叔的日常迷信。
  13. 在线一元二次方程式计算器 源码
  14. Oracle 协议设配器错误解决方案
  15. html5页面 学生作品,最完整长页面H5制作教程来啦!
  16. 又双叒叕夺冠!5年厚积薄发,汇佳学校绿龙冰球队今夏“京城双冠王”!
  17. linux改变群组的命令,linux改变文件群组命令
  18. 一文玩转 WebDriver API
  19. tsmc 7nm工艺下用做syncCell的stdCell介绍
  20. OpenJDK源码下载

热门文章

  1. 有什么好用的通用型项目管理软件
  2. 计算机网络-7-路由器和路由
  3. matlab落海搜救模型,面向海上应急搜救的无人船路径规划
  4. 【c++/euler】套圈法解有向图的欧拉回路
  5. buff/cache内存缓存过大,设置定时清理
  6. ACM模板(满注释模板!)
  7. Flink任务提交on-YARN
  8. 第一次机房收费系统之管理员日结账单
  9. 网络直播,对现代人的一些影响,和网络直播的一些内幕
  10. Golang 注释配置