bash脚本的输入参数解析

#!/usr/bin/env bash

############################################
#用 途: 用于脚本输入参数的规范处理
#测 试:假设文件名为test.sh , 执行./test.sh --daemon --helper=abc  --host_type=os
############################################

curdir=`dirname "$0"`
echo "curdir:"$curdir
curdir=`cd "$curdir"; pwd`
echo "curdir:"$curdir

#"$*" 把所有参数合并成一个字符串
for arg in "$*"; do
    echo "****:" $arg
done
echo --------------
#"$@" 会得到一个字符串参数数组
for arg in "$@"; do
    echo "@@@@:" $arg
done

# getopt 命令用于解析脚本的命令行参数,并根据定义的选项来重新排列这些参数
# -l 'helper:':定义一个长选项 --helper,后面必须跟一个参数。冒号表示这个选项需要一个参数。
OPTS=$(getopt \
  -n $0 \
  -o '' \
  -l 'daemon' \
  -l 'helper:' \
  -l 'host_type:' \
  -l 'debug' \
  -l 'logconsole' \
  -- "$@")

# 将getopt的输出设置为脚本的位置参数($1, $2, $3, ...)
eval set -- "$OPTS"

RUN_DAEMON=0
HELPER=
HOST_TYPE=
ENABLE_DEBUGGER=0
RUN_LOG_CONSOLE=0
while true; do
    case "$1" in
        --daemon) RUN_DAEMON=1 ; shift ;;
        --helper) HELPER=$2 ; shift 2 ;;
        --host_type) HOST_TYPE=$2 ; shift 2 ;;
        --debug) ENABLE_DEBUGGER=1 ; shift ;;
        --logconsole) RUN_LOG_CONSOLE=1 ; shift ;;
        --) shift ;  break ;;
        *) echo "Internal error" ; exit 1 ;;
    esac
done

echo "run_daemon:$RUN_DAEMON helper:$HELPER host_type:$HOST_TYPE "

export STARROCKS_HOME=`cd "$curdir/.."; pwd`

export DORIS_HOME="$STARROCKS_HOME"

export PID_DIR=`cd "$curdir"; pwd`

echo "doris_home:"$DORIS_HOME
echo "pid_dir:"$PID_DIR

posted @ 2024-04-26 10:24  笨功夫才是真功夫  阅读(142)  评论(0编辑  收藏  举报