获取一些常用变量:#获取当前脚本所在目录SCRIPT_DIR=$(cd"$(dirname"${BASH_SOURCE[0]}")"&&pwd)#获取文件名ofthecurrentscriptSCRIPT_NAME=$(basename"$0")#在$DIR中搜索第一个jar文件的名称JAR_FILE=$(find$DIR-maxdepth1-typef-name"*.jar"|head-1)一些常见的判断:#判断变量是否为空if[-z"$VAR"];thenecho"\$VARisempty"elseecho"\$VARis$VAR"fi#判断路径是否存在#-d表示目录,-f表示文件if[-d"$PATH"];thenecho"File$PATHexists"elseecho"File$PATHnotfound"fi#判断当前用户是否为rootif["${EUID:-$(id-u)}"-eq0];thendo_root_stufffi#判断是否可以执行docker命令if!命令-vdocker&>/dev/null;thenecho"Thecurrentsystemcannotrunthedockercommand"fi根据进程启动命令中的关键字查找进程ID#setpid=$(get_pid"some-service-name")get_pid(){SERVICE_NAME=$1PID=$(psaux|grep"[${SERVICE_NAME:0:1}]${SERVICE_NAME:1}"|awk'{print$2}')echo"$PID"}解析查询命令行参数的通用方法这个脚本很有用,你只需要在你的脚本开头添加如下内容,就可以解析出--paramvalue格式的参数由于这个脚本写的尽量短,不占空间,格式会要求全部参数有值,例如--daemon不接受参数,但--daemontrue必须传递。###解析命令行参数PARAMS_ARR=()while(("$#"));在--*)PARAMS_ARR+=($1)中执行case"$1";转移;;*)PARAMS_ARR[${#PARAMS_ARR[@]}-1]="${PARAMS_ARR[${#PARAMS_ARR[@]}-1]}$1";转移;;esacdone###获取命令行参数,如果没有返回默认值###例子:value=$(get_param"param_name""default_value")functionget_param{forparamin"${PARAMS_ARR[@]}";如果[[$param=~"--$1"]];然后echo${param#"--$1"}&&return0;fidoneecho$2}###获取命令行参数,如果没有则报错退出(退出机制需要通过set-e开启,否则返回值需要自己处理)###示例:value=$(get_param_required"param_name")functionget_param_required{forparamin"${PARAMS_ARR[@]}";如果[[$param=~"--$1"]];然后echo${param#"--$1"}&&return0;fidoneecho-e"\e[31mParameter'$1'isrequired\e[m">&2&&return1}set-eparseparametervaluefromabovescriptasarrayifparametervalue如果是多个,可以使用以下将其提取到数组中的语句:#假设要提取名为PARAM_NAME的参数值并将其分配给数组ARR,可以使用以下语句lineIFS=','read-r-aARR<<<$(get_paramPARAM_NAME)#这里的多个参数值可以用逗号或者空格隔开,例如“--valuesa,b,cd”,#解析出来的数组元素不会包含空白字符#查看解析结果echo"ARRsize:${#ARR[@]}"echo"ARRcontent:${ARR[@]}"
