1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェルスクリプトで2本の水平バーを使って外部パラメータを受け取る方法

2022-02-07 18:33:30

まず、効果はこんな感じです。

短いオプション(-)と長いオプション(--)の両方を扱うことができる

[developer@hadoop-cluster-manager shell]$ . /demo.sh --help
The sqoop program starts running: demo.sh
Usage: . /demo.sh [options]
 
Options:
 --append, -a: append to import (default is append mode)
 --overwrite, -o: overwrite import 
 
 --method, -m: single-single-day import
          interval-Interval import
          all-all-table import
 
 --date, -d: single-day import, with a date (in yyyymmdd format)
 
 --startdate, -s: interval-import, start date
 --enddate, -e: interval import, end date
 
 --help, -h help

シェルスクリプトに外部引数を与える非常に簡単な方法があります。スクリプトを実行するときに渡される最初のいくつかの引数を参照するために $0,$1,$2... を使います($0 はスクリプト名です)。

しかし、これは十分なエレガントさではありません、結局のところ

もう一つの方法は、シェルスクリプトの中でgetoptsコマンドを使うことです。これは短いオプション(例:-d, -s, -h)しか取れませんが、便利で比較的簡単なので、自分で検索することができます。

しかし、長いオプションと短いオプション(例:-date, -d, --startdate, -s, --help, -h)の両方を使用して上記の効果を得たい場合、以下のようになります。

は、getoptコマンドしか使えません。

# Define command execution options
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: append import (default is append mode) \n --overwrite, -o: overwrite import \n\n --method, -m: single-single-day import \n interval-import \n all-all-table import \n\n --date , -d: single-day import, data on a certain date (in the format yyyymmdd) \n\n --startdate, -s: interval import, start date \n\n --enddate, -e: interval import, end date \n\n --help, -h help"
  exit 1
fi
 
# Assign normalized command-line arguments to location parameters ($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}"
 
# Accept execution options; assign to variables
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: append import (default is append mode) \n --overwrite, -o: overwrite import \n\n --method, -m: single-single-day import \n interval-import \n all-all-table import \n\n --date , -d: single-day import, data on a certain date (format yyyymmdd) \n\n --startdate, -s: interval import, start date \n\n --enddate, -e: interval import, end date \n\n --help, -h help"
   exit 0
   ;;
  ?)
   echo "Missing options, pls check!"
   exit 1
   ;;
 esac
done

この記事は、シェルスクリプトは、2つの水平方向のバーを使用して外部引数を受信することについてのすべてです、より関連するシェルスクリプトの引数を受信する内容は、スクリプトハウスの過去の記事を検索してくださいまたは次の関連記事を閲覧を継続し、あなたが将来的にもっとスクリプトハウスをサポートして願って!.