您好,登錄后才能下訂單哦!
小編給大家分享一下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
看完了這篇文章,相信你對(duì)“shell腳本怎么使用兩個(gè)橫杠接收外部參數(shù)”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。