文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-04 23:43

关注

首先,效果是这样的:

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


[developer@hadoop-cluster-manag

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯