shell腳本使用兩個(gè)橫杠接收外部參數(shù)的方法
首先,效果是這樣的:
既可以處理短選項(xiàng)(-)又可以處理長(zhǎng)選項(xiàng)(--)
[developer@hadoop-cluster-manager shell]$ ./demo.sh --help
sqoop程序開(kāi)始運(yùn)行: demo.sh
Usage: ./demo.sh [options]
Options:
--append, -a: 追加導(dǎo)入(默認(rèn)為追加模式)
--overwrite, -o: 覆蓋導(dǎo)入
--method, -m: single-單日導(dǎo)入
interval-區(qū)間導(dǎo)入
all-全表導(dǎo)入
--date, -d: 單日導(dǎo)入,某一日期數(shù)據(jù)(格式為yyyymmdd)
--startdate, -s: 區(qū)間導(dǎo)入,開(kāi)始日期
--enddate, -e: 區(qū)間導(dǎo)入,結(jié)束日期
--help, -h 幫助
shell腳本接外部參數(shù)有一種很簡(jiǎn)單的辦法,在腳本中使用$0,$1,$2...指代執(zhí)行腳本時(shí)傳入的第幾個(gè)參數(shù)($0是腳本名)。
但是,這樣做畢竟不夠優(yōu)雅,
另一種方法shell腳本內(nèi)使用getopts命令,只可以接短選項(xiàng)(eg:-d,-s,-h),很方便,比較簡(jiǎn)單,可以自己去搜一搜。
但如果想要達(dá)成上面這種效果同時(shí)支持長(zhǎng)選項(xiàng)和短選項(xiàng)(eg:--date,-d,--startdate,-s,--help,-h),
就只能使用getopt命令了:
# 定義命令執(zhí)行選項(xiàng)
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: 追加導(dǎo)入(默認(rèn)為追加模式)\n --overwrite, -o: 覆蓋導(dǎo)入 \n\n --method, -m: single-單日導(dǎo)入\n interval-區(qū)間導(dǎo)入\n all-全表導(dǎo)入\n\n --date, -d: 單日導(dǎo)入,某一日期數(shù)據(jù)(格式為yyyymmdd)\n\n --startdate, -s: 區(qū)間導(dǎo)入,開(kāi)始日期\n --enddate, -e: 區(qū)間導(dǎo)入,結(jié)束日期\n\n --help, -h 幫助"
exit 1
fi
# 將規(guī)范化后的命令行參數(shù)分配至位置參數(shù)($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}"
# 接受執(zhí)行選項(xiàng);賦值給變量
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: 追加導(dǎo)入(默認(rèn)為追加模式)\n --overwrite, -o: 覆蓋導(dǎo)入 \n\n --method, -m: single-單日導(dǎo)入\n interval-區(qū)間導(dǎo)入\n all-全表導(dǎo)入\n\n --date, -d: 單日導(dǎo)入,某一日期數(shù)據(jù)(格式為yyyymmdd)\n\n --startdate, -s: 區(qū)間導(dǎo)入,開(kāi)始日期\n --enddate, -e: 區(qū)間導(dǎo)入,結(jié)束日期\n\n --help, -h 幫助"
exit 0
;;
?)
echo "missing options, pls check!"
exit 1
;;
esac
done
到此這篇關(guān)于shell腳本使用兩個(gè)橫杠接收外部參數(shù)的文章就介紹到這了,更多相關(guān)shell腳本接收參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 監(jiān)控MySQL主從狀態(tài)的shell腳本
- 使用Shell腳本如何啟動(dòng)/停止Java的jar程序
- Shell中使用grep、sed正則提取和替換字符串
- Shell eval通過(guò)變量獲取環(huán)境變量的方法實(shí)現(xiàn)
- shell腳本實(shí)戰(zhàn)-while循環(huán)語(yǔ)句
- shell腳本--sed的用法詳解
- linux shell中 if else以及大于、小于、等于邏輯表達(dá)式介紹
- Linux中執(zhí)行shell腳本的4種方法總結(jié)
- 一個(gè)不錯(cuò)的shell 腳本教程 入門(mén)級(jí)
- Shell字符串比較相等、不相等方法小結(jié)
- python中執(zhí)行shell命令的幾個(gè)方法小結(jié)
- 分享一個(gè)可以通過(guò)命令簡(jiǎn)寫(xiě)執(zhí)行對(duì)應(yīng)命令的Shell腳本
相關(guān)文章
shell 腳本之用ab每隔30分鐘并發(fā)一次休息10分鐘
這篇文章給大家分享如何使用shll解決用ab每隔30分鐘并發(fā)一次休息10分鐘,需要的朋友可以參考下2019-11-11
linux查看所有用戶(hù)和查看用戶(hù)組的方法(修改用戶(hù)組)
linux里并沒(méi)有像windows的net user,net localgroup這些方便的命令來(lái)管理用戶(hù),下面介紹查看所有用戶(hù)和用戶(hù)組的方法2014-01-01
Shell腳本實(shí)現(xiàn)監(jiān)控swap空間使用情況和查看占用swap的進(jìn)程
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)監(jiān)控swap空間使用情況和查看占用swap的進(jìn)程,曾經(jīng)有一段時(shí)間機(jī)器的swap不停上漲,監(jiān)控后發(fā)現(xiàn)是一些java進(jìn)程占用swap空間后,完全不釋放,殺死這些java進(jìn)程后,釋放swap,需要的朋友可以參考下2014-12-12
linux awk高級(jí)應(yīng)用實(shí)例
今天看到unix shell 范例精解上有道awk的題目 做了以后拿來(lái)和大家分享下2016-08-08
使用shell腳本每天對(duì)MySQL多個(gè)數(shù)據(jù)庫(kù)自動(dòng)備份的講解
今天小編就為大家分享一篇關(guān)于使用shell腳本每天對(duì)MySQL多個(gè)數(shù)據(jù)庫(kù)自動(dòng)備份的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
Shell腳本實(shí)現(xiàn)監(jiān)控rsync數(shù)據(jù)是否傳輸完
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)監(jiān)控rsync數(shù)據(jù)是否傳輸完,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-12-12

