shell腳本使用兩個橫杠接收外部參數的方法
首先,效果是這樣的:
既可以處理短選項(-)又可以處理長選項(–)
[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腳本接收參數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Shell編程中Shift的用法小結
- mysql判斷當前時間是否在開始與結束時間之間且開始與結束時間允許為空
- 微信小程序實現日期范圍選擇
- SpringData JPA的常用語法匯總
- ElementUI時間選擇器限制選擇范圍disabledData的使用