溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在shell腳本中接收外部參數(shù)

發(fā)布時(shí)間:2020-12-24 16:07:22 來(lái)源:億速云 閱讀:1345 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了怎么在shell腳本中接收外部參數(shù),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

首先,效果是這樣的:

既可以處理短選項(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

上述內(nèi)容就是怎么在shell腳本中接收外部參數(shù),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI