You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hugegraph.apache.org by ji...@apache.org on 2023/01/12 14:03:38 UTC

[incubator-hugegraph-toolchain] branch master updated: refact: enhance shell script style (#418)

This is an automated email from the ASF dual-hosted git repository.

jin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph-toolchain.git


The following commit(s) were added to refs/heads/master by this push:
     new af01011d refact: enhance shell script style (#418)
af01011d is described below

commit af01011dd9761cd9446498f4b4c8347141732c42
Author: imbajin <ji...@apache.org>
AuthorDate: Thu Jan 12 22:03:29 2023 +0800

    refact: enhance shell script style (#418)
---
 hugegraph-client/build.sh                          | 24 -------
 .../assembly/static/bin/start-hubble.sh            |  3 +-
 .../hubble-dist/assembly/static/bin/stop-hubble.sh |  2 +-
 hugegraph-loader/assembly/static/bin/get-params.sh |  2 +-
 .../static/bin/hugegraph-flinkcdc-loader.sh        | 16 ++---
 .../assembly/static/bin/hugegraph-loader.sh        |  2 +-
 .../assembly/static/bin/hugegraph-spark-loader.sh  | 16 ++---
 .../assembly/static/bin/mapping-convert.sh         | 14 ++--
 .../assembly/static/bin/utf8-bom-to-utf8.sh        |  2 +-
 hugegraph-loader/build.sh                          | 24 -------
 hugegraph-tools/assembly/bin/backup.sh             | 19 +++--
 hugegraph-tools/assembly/bin/clear.sh              | 24 +++----
 hugegraph-tools/assembly/bin/deploy.sh             | 48 ++++++-------
 hugegraph-tools/assembly/bin/hugegraph             | 59 +++++++++-------
 hugegraph-tools/assembly/bin/release.sh            | 44 ++++++------
 hugegraph-tools/assembly/bin/schedule-backup.sh    | 33 ++++-----
 hugegraph-tools/assembly/bin/start-all.sh          | 28 ++++----
 hugegraph-tools/assembly/bin/stop-all.sh           | 12 ++--
 hugegraph-tools/assembly/bin/util.sh               | 80 +++++++++++-----------
 hugegraph-tools/build.sh                           | 22 ------
 20 files changed, 206 insertions(+), 268 deletions(-)

diff --git a/hugegraph-client/build.sh b/hugegraph-client/build.sh
deleted file mode 100644
index 03d8de92..00000000
--- a/hugegraph-client/build.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-HUGEGRAPH_CLIENT_RELEASE_PATH="${PWD}/output/"
-
-export MAVEN_HOME="/home/scmtools/buildkit/maven/apache-maven-3.3.9/"
-export JAVA_HOME="/home/scmtools/buildkit/java/jdk1.8.0_25/"
-export PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH"
-
-mvn clean test -Dtest=UnitTestSuite
diff --git a/hugegraph-hubble/hubble-dist/assembly/static/bin/start-hubble.sh b/hugegraph-hubble/hubble-dist/assembly/static/bin/start-hubble.sh
index e9c9c9d7..b15b3c49 100644
--- a/hugegraph-hubble/hubble-dist/assembly/static/bin/start-hubble.sh
+++ b/hugegraph-hubble/hubble-dist/assembly/static/bin/start-hubble.sh
@@ -78,7 +78,8 @@ args=${CONF_PATH}/hugegraph-hubble.properties
 log=${LOG_PATH}/hugegraph-hubble.log
 
 echo -n "starting HugeGraphHubble "
-nohup nice -n 0 java -server "${java_opts}" -Dhubble.home.path="${HOME_PATH}" -cp "${class_path}" ${main_class} "${args}" > "${log}" 2>&1 < /dev/null &
+nohup nice -n 0 java -server "${java_opts}" -Dhubble.home.path="${HOME_PATH}" \
+-cp "${class_path}" ${main_class} "${args}" > "${log}" 2>&1 < /dev/null &
 pid=$!
 echo ${pid} > "${PID_FILE}"
 
diff --git a/hugegraph-hubble/hubble-dist/assembly/static/bin/stop-hubble.sh b/hugegraph-hubble/hubble-dist/assembly/static/bin/stop-hubble.sh
index 8d525ff9..03f1015a 100644
--- a/hugegraph-hubble/hubble-dist/assembly/static/bin/stop-hubble.sh
+++ b/hugegraph-hubble/hubble-dist/assembly/static/bin/stop-hubble.sh
@@ -15,7 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-HOME_PATH=$(dirname $0)
+HOME_PATH=$(dirname "$0")
 HOME_PATH=$(cd "${HOME_PATH}"/.. && pwd)
 BIN_PATH=${HOME_PATH}/bin
 PID_FILE=${BIN_PATH}/pid
diff --git a/hugegraph-loader/assembly/static/bin/get-params.sh b/hugegraph-loader/assembly/static/bin/get-params.sh
index e0302399..b9040de1 100644
--- a/hugegraph-loader/assembly/static/bin/get-params.sh
+++ b/hugegraph-loader/assembly/static/bin/get-params.sh
@@ -47,7 +47,7 @@ function get_params() {
     esac
   done
 
-  if [ $mode = 'cluster' ];then
+  if [ "$mode" = 'cluster' ];then
     HUGEGRAPH_PARAMS="$HUGEGRAPH_PARAMS --file ${file##*/}"
     ENGINE_PARAMS="$ENGINE_PARAMS --files ${file}"
   else
diff --git a/hugegraph-loader/assembly/static/bin/hugegraph-flinkcdc-loader.sh b/hugegraph-loader/assembly/static/bin/hugegraph-flinkcdc-loader.sh
index e424dd98..2cd65d96 100755
--- a/hugegraph-loader/assembly/static/bin/hugegraph-flinkcdc-loader.sh
+++ b/hugegraph-loader/assembly/static/bin/hugegraph-flinkcdc-loader.sh
@@ -16,20 +16,20 @@
 # limitations under the License.
 #
 BIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-APP_DIR=$(dirname ${BIN_DIR})
+APP_DIR=$(dirname "${BIN_DIR}")
 LIB_DIR=${APP_DIR}/lib
-ASSEMBLY_JAR_NAME=$(find ${LIB_DIR} -name hugegraph-loader*.jar)
+ASSEMBLY_JAR_NAME=$(find "${LIB_DIR}" -name 'hugegraph-loader*.jar')
 
 # get hugegraph_params and engine_params
 source "$BIN_DIR"/get-params.sh
-get_params $*
+get_params "$@"
 echo "engine_params: $ENGINE_PARAMS"
 echo "hugegraph_params: $HUGEGRAPH_PARAMS"
 
 CMD=${FLINK_HOME}/bin/flink run \
-  ${ENGINE_PARAMS} \
-  -c org.apache.hugegraph.loader.flink.HugeGraphFlinkCDCLoader \
-  ${ASSEMBLY_JAR_NAME} ${HUGEGRAPH_PARAMS}
+    "${ENGINE_PARAMS}" \
+    -c org.apache.hugegraph.loader.flink.HugeGraphFlinkCDCLoader \
+    "${ASSEMBLY_JAR_NAME}" "${HUGEGRAPH_PARAMS}"
 
-echo ${CMD}
-exec ${CMD}
+echo "${CMD}"
+exec "${CMD}"
diff --git a/hugegraph-loader/assembly/static/bin/hugegraph-loader.sh b/hugegraph-loader/assembly/static/bin/hugegraph-loader.sh
index 4bc89652..23615e5b 100755
--- a/hugegraph-loader/assembly/static/bin/hugegraph-loader.sh
+++ b/hugegraph-loader/assembly/static/bin/hugegraph-loader.sh
@@ -25,7 +25,7 @@ abs_path() {
     echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
 }
 
-BIN=`abs_path`
+BIN=$(abs_path)
 TOP="$(cd ${BIN}/../ && pwd)"
 CONF="$TOP/conf"
 LIB="$TOP/lib"
diff --git a/hugegraph-loader/assembly/static/bin/hugegraph-spark-loader.sh b/hugegraph-loader/assembly/static/bin/hugegraph-spark-loader.sh
index 99d7c51f..6aa38439 100755
--- a/hugegraph-loader/assembly/static/bin/hugegraph-spark-loader.sh
+++ b/hugegraph-loader/assembly/static/bin/hugegraph-spark-loader.sh
@@ -16,25 +16,23 @@
 # limitations under the License.
 #
 BIN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-APP_DIR=$(dirname ${BIN_DIR})
+APP_DIR=$(dirname "${BIN_DIR}")
 LIB_DIR=${APP_DIR}/lib
 
 # get hugegraph_params and engine_params
 source "$BIN_DIR"/get-params.sh
-get_params $*
+get_params "$@"
 echo "engine_params: $ENGINE_PARAMS"
 echo "hugegraph_params: $HUGEGRAPH_PARAMS"
 
-ASSEMBLY_JAR_NAME=$(find ${LIB_DIR} -name hugegraph-loader*.jar)
-
+ASSEMBLY_JAR_NAME=$(find "${LIB_DIR}" -name 'hugegraph-loader*.jar')
 
 DEFAULT_APP_NAME="hugegraph-spark-loader"
 APP_NAME=${APP_NAME:-$DEFAULT_APP_NAME}
 
 CMD="${SPARK_HOME}/bin/spark-submit
-    --class org.apache.hugegraph.loader.spark.HugeGraphSparkLoader \
-    ${ENGINE_PARAMS}
-    --jars $(echo ${LIB_DIR}/*.jar | tr ' ' ',') ${ASSEMBLY_JAR_NAME} ${HUGEGRAPH_PARAMS}"
+    --class org.apache.hugegraph.loader.spark.HugeGraphSparkLoader ${ENGINE_PARAMS} \
+    --jars $(echo "${LIB_DIR}"/*.jar | tr ' ' ',') ${ASSEMBLY_JAR_NAME} ${HUGEGRAPH_PARAMS}"
 
-echo ${CMD}
-exec ${CMD}
+echo "${CMD}"
+exec "${CMD}"
diff --git a/hugegraph-loader/assembly/static/bin/mapping-convert.sh b/hugegraph-loader/assembly/static/bin/mapping-convert.sh
index 64f55dd0..2173c1af 100755
--- a/hugegraph-loader/assembly/static/bin/mapping-convert.sh
+++ b/hugegraph-loader/assembly/static/bin/mapping-convert.sh
@@ -18,9 +18,9 @@
 export LANG=zh_CN.UTF-8
 set -e
 
-HOME_PATH=`dirname $0`
-HOME_PATH=`cd ${HOME_PATH}/.. && pwd`
-cd ${HOME_PATH}
+HOME_PATH=$(dirname "$0")
+HOME_PATH=$(cd "${HOME_PATH}"/.. && pwd)
+cd "${HOME_PATH}"
 
 BIN_PATH=${HOME_PATH}/bin
 CONF_PATH=${HOME_PATH}/conf
@@ -34,15 +34,15 @@ if [[ -z "$1" ]]; then
 fi
 
 if [[ ! -d ${LOG_PATH} ]]; then
-    mkdir ${LOG_PATH}
+    mkdir "${LOG_PATH}"
 fi
 
 class_path="."
-for jar in `ls ${LIB_PATH}/*.jar`; do
+for jar in "$LIB_PATH"/*.jar; do
     class_path=${class_path}:${jar}
 done
 
 args=$1
 main_class="org.apache.hugegraph.loader.MappingConverter"
-exec java -Dlog4j.configurationFile=${CONF_PATH}/log4j2.xml \
--cp ${class_path} ${main_class} ${args}
+exec java -Dlog4j.configurationFile="${CONF_PATH}"/log4j2.xml \
+    -cp "${class_path}" ${main_class} "${args}"
diff --git a/hugegraph-loader/assembly/static/bin/utf8-bom-to-utf8.sh b/hugegraph-loader/assembly/static/bin/utf8-bom-to-utf8.sh
index 38b55058..76138cd2 100755
--- a/hugegraph-loader/assembly/static/bin/utf8-bom-to-utf8.sh
+++ b/hugegraph-loader/assembly/static/bin/utf8-bom-to-utf8.sh
@@ -22,5 +22,5 @@ if [[ -z "$1" ]]; then
 fi
 
 path=$1
-find ${path} -type f -name "*" -print | xargs -i sed -i '1 s/^\xef\xbb\xbf//' {}
+find "${path}" -type f -name "*" -print | xargs -i sed -i '1 s/^\xef\xbb\xbf//' {}
 echo "Conversion completed"
diff --git a/hugegraph-loader/build.sh b/hugegraph-loader/build.sh
deleted file mode 100644
index 1946a0a3..00000000
--- a/hugegraph-loader/build.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-HUGEGRAPH_LOADER_RELEASE_PATH="${PWD}/output/"
-
-export MAVEN_HOME="/home/scmtools/buildkit/maven/apache-maven-3.3.9/"
-export JAVA_HOME="/home/scmtools/buildkit/java/jdk1.8.0_25/"
-export PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH"
-
-mvn clean compile
diff --git a/hugegraph-tools/assembly/bin/backup.sh b/hugegraph-tools/assembly/bin/backup.sh
index 3e91bd6f..70ee5b1f 100755
--- a/hugegraph-tools/assembly/bin/backup.sh
+++ b/hugegraph-tools/assembly/bin/backup.sh
@@ -18,23 +18,22 @@
 function abs_path() {
     SOURCE="${BASH_SOURCE[0]}"
     while [ -h "$SOURCE" ]; do
-        DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+        DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
         SOURCE="$(readlink "$SOURCE")"
         [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
     done
-    echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+    echo "$(cd -P "$(dirname "$SOURCE")" && pwd)"
 }
 
-BIN=`abs_path`
-cd $BIN
+BIN=$(abs_path)
+cd "$BIN" || exit
 
 # do backup
-bash $BIN/hugegraph ${*:1:$(($#-2))}"/hugegraph-backup-`date +%y%m%d%H%M`/"
+bash "$BIN"/hugegraph "${*:1:$(($# - 2))}/hugegraph-backup-$(date +%y%m%d%H%M)/"
 
-DIR=`eval echo '${'$(($#-2))'}'`
-NUM=`eval echo '${'$#'}'`
+DIR=$(eval echo '${'$(($# - 2))'}')
+NUM=$(eval echo '${'$#'}')
 # delete redundant backups if needed
-for i in `ls -lt $DIR | grep -v "total" | grep "hugegraph-backup-" | awk -v awkNum="$NUM" '{if(NR>awkNum){print $9}}'`
-do
-    rm -fr "$DIR/$i"
+for i in $(ls -lt "$DIR" | grep -v "total" | grep "hugegraph-backup-" | awk -v awkNum="$NUM" '{if(NR>awkNum){print $9}}'); do
+    rm -rf "${DIR:?}/$i"
 done
diff --git a/hugegraph-tools/assembly/bin/clear.sh b/hugegraph-tools/assembly/bin/clear.sh
index f9b01326..4845ec46 100755
--- a/hugegraph-tools/assembly/bin/clear.sh
+++ b/hugegraph-tools/assembly/bin/clear.sh
@@ -44,22 +44,22 @@ if [ ! -w "${INSTALL_PATH}" ]; then
     exit 1
 fi
 
-INSTALL_PATH="$(cd ${INSTALL_PATH} && pwd)"
+INSTALL_PATH="$(cd "${INSTALL_PATH}" && pwd)"
 
 function abs_path() {
     SOURCE="${BASH_SOURCE[0]}"
     while [ -h "$SOURCE" ]; do
-        DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+        DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
         SOURCE="$(readlink "$SOURCE")"
         [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
     done
-    echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+    echo "$(cd -P "$(dirname "$SOURCE")" && pwd)"
 }
 
-BIN=`abs_path`
-. ${BIN}/util.sh
+BIN=$(abs_path)
+. "${BIN}"/util.sh
 
-cd ${BIN}
+cd "${BIN}" || exit
 
 SERVER_RELEASE_PREFIX="hugegraph"
 STUDIO_RELEASE_PREFIX="hugegraph-studio"
@@ -68,9 +68,9 @@ function ensure_no_process() {
     local path=$1
     local prefix=$2
 
-    for file in `ls ${path}`; do
+    for file in $path; do
         file=${path}/${file}
-        if [[ -d "${file}" && "${file}" =~ "${prefix}" ]]; then
+        if [[ -d "${file}" && "${file}" =~ ${prefix} ]]; then
             p_name=${file}
             process_status "${p_name}" >/dev/null
             if [ $? -eq 0 ]; then
@@ -81,13 +81,13 @@ function ensure_no_process() {
     done
 }
 
-ensure_no_process ${INSTALL_PATH} ${SERVER_RELEASE_PREFIX}
-ensure_no_process ${INSTALL_PATH} ${STUDIO_RELEASE_PREFIX}
+ensure_no_process "${INSTALL_PATH}" ${SERVER_RELEASE_PREFIX}
+ensure_no_process "${INSTALL_PATH}" ${STUDIO_RELEASE_PREFIX}
 
-for file in ${INSTALL_PATH}/${SERVER_RELEASE_PREFIX}*; do
+for file in "${INSTALL_PATH}/${SERVER_RELEASE_PREFIX}"*; do
     remove_with_prompt "${file}"
 done
 
-for file in ${INSTALL_PATH}/${STUDIO_RELEASE_PREFIX}*; do
+for file in "${INSTALL_PATH}/${STUDIO_RELEASE_PREFIX}"*; do
     remove_with_prompt "${file}"
 done
diff --git a/hugegraph-tools/assembly/bin/deploy.sh b/hugegraph-tools/assembly/bin/deploy.sh
index 579fb0c9..40368733 100755
--- a/hugegraph-tools/assembly/bin/deploy.sh
+++ b/hugegraph-tools/assembly/bin/deploy.sh
@@ -19,7 +19,7 @@ VERSION=""
 INSTALL_PATH=""
 DOWNLOAD_LINK_PREFIX=""
 DEFAULT_DOWNLOAD_LINK_PREFIX="https://github.com/hugegraph"
-DOWNLOAD_LINK_PREFIX_CONFIG=`env | grep ^HOME= | cut -c 6-`"/hugegraph-download-url-prefix"
+DOWNLOAD_LINK_PREFIX_CONFIG=$(env | grep ^HOME= | cut -c 6-)"/hugegraph-download-url-prefix"
 
 function print_usage() {
     echo "USAGE: $0 -v {hugegraph-version} -p {install-path} [-u {download-path-prefix}]"
@@ -41,49 +41,49 @@ if [[ "$VERSION" = "" || "$INSTALL_PATH" = "" ]]; then
 fi
 
 if [[ "$DOWNLOAD_LINK_PREFIX" = "" ]]; then
-    if [ -f ${DOWNLOAD_LINK_PREFIX_CONFIG} ]; then
-        DOWNLOAD_LINK_PREFIX=`sed -n "1p" ${DOWNLOAD_LINK_PREFIX_CONFIG}`
+    if [ -f "${DOWNLOAD_LINK_PREFIX_CONFIG}" ]; then
+        DOWNLOAD_LINK_PREFIX=$(sed -n "1p" "${DOWNLOAD_LINK_PREFIX_CONFIG}")
     else
         DOWNLOAD_LINK_PREFIX=${DEFAULT_DOWNLOAD_LINK_PREFIX}
     fi
 else
-    echo ${DOWNLOAD_LINK_PREFIX} > ${DOWNLOAD_LINK_PREFIX_CONFIG}
+    echo ${DOWNLOAD_LINK_PREFIX} >"${DOWNLOAD_LINK_PREFIX_CONFIG}"
 fi
 
 function abs_path() {
     SOURCE="${BASH_SOURCE[0]}"
     while [ -h "$SOURCE" ]; do
-        DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+        DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
         SOURCE="$(readlink "$SOURCE")"
         [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
     done
-    echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+    echo "$(cd -P "$(dirname "$SOURCE")" && pwd)"
 }
 
-BIN=`abs_path`
-. ${BIN}/util.sh
+BIN=$(abs_path)
+. "${BIN}"/util.sh
 
-`ensure_path_writable ${INSTALL_PATH}`
+ensure_path_writable "${INSTALL_PATH}"
 
 # Convert to absolute path
-INSTALL_PATH="$(cd ${INSTALL_PATH} && pwd)"
+INSTALL_PATH="$(cd "${INSTALL_PATH}" && pwd)"
 
-cd ${BIN}
+cd "${BIN}" || exit
 
 # Check input version can be found in version-map.yaml
-OPTIONAL_VERSIONS=`cat version-map.yaml | grep 'version' | awk -F ':' '{print $1}' | xargs`
-if [[ ! "$OPTIONAL_VERSIONS" =~ "$VERSION" ]]; then
+OPTIONAL_VERSIONS=$(cat version-map.yaml | grep 'version' | awk -F ':' '{print $1}' | xargs)
+if [[ ! "$OPTIONAL_VERSIONS" =~ $VERSION ]]; then
     echo "Invalid version '${VERSION}' for hugegraph, the optional values are [$OPTIONAL_VERSIONS]"
     exit 1
 fi
 
 # Parse module version from 'version-map.yaml'
-SERVER_VERSION=`parse_yaml version-map.yaml "${VERSION}" "server"`
+SERVER_VERSION=$(parse_yaml version-map.yaml "${VERSION}" "server")
 if [ "$SERVER_VERSION" = "" ]; then
     echo "Not found the key '$VERSION.server' in version-map.yaml"
     exit 1
 fi
-STUDIO_VERSION=`parse_yaml version-map.yaml "${VERSION}" "studio"`
+STUDIO_VERSION=$(parse_yaml version-map.yaml "${VERSION}" "studio")
 if [ "$STUDIO_VERSION" = "" ]; then
     echo "Not found the key '$VERSION.studio' in version-map.yaml"
     exit 1
@@ -103,29 +103,29 @@ STUDIO_TAR=${STUDIO_DIR}${ARCHIVE_FORMAT}
 SERVER_DOWNLOAD_URL="${DOWNLOAD_LINK_PREFIX}/hugegraph/releases/download/v${SERVER_VERSION}/${SERVER_TAR}"
 STUDIO_DOWNLOAD_URL="${DOWNLOAD_LINK_PREFIX}/hugegraph-studio/releases/download/v${STUDIO_VERSION}/${STUDIO_TAR}"
 
-ensure_package_exist $INSTALL_PATH $SERVER_DIR $SERVER_TAR $SERVER_DOWNLOAD_URL
-ensure_package_exist $INSTALL_PATH $STUDIO_DIR $STUDIO_TAR $STUDIO_DOWNLOAD_URL
+ensure_package_exist "$INSTALL_PATH" "$SERVER_DIR" "$SERVER_TAR" "$SERVER_DOWNLOAD_URL"
+ensure_package_exist "$INSTALL_PATH" "$STUDIO_DIR" "$STUDIO_TAR" "$STUDIO_DOWNLOAD_URL"
 
-IP=`get_ip`
+IP=$(get_ip)
 
 function config_hugegraph_server() {
     local rest_server_conf="$SERVER_DIR/conf/rest-server.properties"
     local server_url="http://$IP:8080"
 
-    write_property $rest_server_conf "restserver\.url" $server_url
+    write_property "$rest_server_conf" "restserver\.url" "$server_url"
 }
 
 function config_hugegraph_studio() {
     local studio_server_conf="$STUDIO_DIR/conf/hugegraph-studio.properties"
 
-    write_property $studio_server_conf "studio\.server\.host" $IP
-    write_property $studio_server_conf "graph\.server\.host" $IP
+    write_property "$studio_server_conf" "studio\.server\.host" "$IP"
+    write_property "$studio_server_conf" "graph\.server\.host" "$IP"
 }
 
-cd ${INSTALL_PATH}
+cd "${INSTALL_PATH}" || exit
 config_hugegraph_server
 config_hugegraph_studio
 
-${SERVER_DIR}/bin/init-store.sh
+"${SERVER_DIR}"/bin/init-store.sh
 
-${BIN}/start-all.sh -v ${VERSION} -p ${INSTALL_PATH}
+"${BIN}"/start-all.sh -v "${VERSION}" -p "${INSTALL_PATH}"
diff --git a/hugegraph-tools/assembly/bin/hugegraph b/hugegraph-tools/assembly/bin/hugegraph
index 3a2635c2..2151a2eb 100755
--- a/hugegraph-tools/assembly/bin/hugegraph
+++ b/hugegraph-tools/assembly/bin/hugegraph
@@ -27,20 +27,20 @@
 abs_path() {
     SOURCE="${BASH_SOURCE[0]}"
     while [ -h "$SOURCE" ]; do
-        DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+        DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
         SOURCE="$(readlink "$SOURCE")"
         [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
     done
-    echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+    echo "$(cd -P "$(dirname "$SOURCE")" && pwd)"
 }
 
-BIN=`abs_path`
+BIN=$(abs_path)
 TOP="$(cd $BIN/../ && pwd)"
 LIB=$TOP/lib:$JAVA_HOME/lib/ext:$JAVA_HOME/jre/lib/ext
 
-. $BIN/util.sh
+. "$BIN"/util.sh
 
-MAX_MEM=$[96*1024]
+MAX_MEM=$((96 * 1024))
 MIN_MEM=512
 
 if [ -n "$JAVA_HOME" ]; then
@@ -52,19 +52,19 @@ fi
 
 if [ "$1" == "deploy" ]; then
     shift
-    bash $BIN/deploy.sh $@
+    bash $BIN/deploy.sh "$@"
     exit $?
 fi
 
 if [ "$1" == "start-all" ]; then
     shift
-    bash $BIN/start-all.sh $@
+    bash $BIN/start-all.sh "$@"
     exit $?
 fi
 
 if [ "$1" == "clear" ]; then
     shift
-    bash $BIN/clear.sh $@
+    bash $BIN/clear.sh "$@"
     exit $?
 fi
 
@@ -74,58 +74,57 @@ if [ "$1" == "stop-all" ]; then
 fi
 
 # Set default environment variables if not exist
-echo $* | grep "\--url" > /dev/null 2>&1
-if [ $? -ne 0 -a -n "$HUGEGRAPH_URL" ]; then
+echo "$@" | grep "\--url" >/dev/null 2>&1
+if [ $? -ne 0 ] && [ -n "$HUGEGRAPH_URL" ]; then
     URL_ARG="--url $HUGEGRAPH_URL"
 else
     URL_ARG=""
 fi
 
-echo $* | grep "\--graph " > /dev/null 2>&1
-if [ $? -ne 0 -a -n "$HUGEGRAPH_GRAPH" ]; then
+echo "$@" | grep "\--graph " >/dev/null 2>&1
+if [ $? -ne 0 ] && [ -n "$HUGEGRAPH_GRAPH" ]; then
     GRAPH_ARG="--graph $HUGEGRAPH_GRAPH"
 else
     GRAPH_ARG=""
 fi
 
-echo $* | grep "\--user" > /dev/null 2>&1
-if [ $? -ne 0 -a -n "$HUGEGRAPH_USERNAME" ]; then
+echo "$@" | grep "\--user" >/dev/null 2>&1
+if [ $? -ne 0 ] && [ -n "$HUGEGRAPH_USERNAME" ]; then
     USER_ARG="--user $HUGEGRAPH_USERNAME"
 else
     USER_ARG=""
 fi
 
-echo $* | grep "\--password" > /dev/null 2>&1
-if [ $? -ne 0 -a -n "$HUGEGRAPH_PASSWORD" ]; then
+echo "$@" | grep "\--password" >/dev/null 2>&1
+if [ $? -ne 0 ] && [ -n "$HUGEGRAPH_PASSWORD" ]; then
     PASSWORD_ARG="--password $HUGEGRAPH_PASSWORD"
 else
     PASSWORD_ARG=""
 fi
 
-echo $* | grep "\--timeout" > /dev/null 2>&1
+echo $* | grep "\--timeout" >/dev/null 2>&1
 if [ $? -ne 0 -a -n "$HUGEGRAPH_TIMEOUT" ]; then
     TIMEOUT_ARG="--timeout $HUGEGRAPH_TIMEOUT"
 else
     TIMEOUT_ARG=""
 fi
 
-echo $* | grep "\--trust-store-file" > /dev/null 2>&1
+echo $* | grep "\--trust-store-file" >/dev/null 2>&1
 if [ $? -ne 0 -a -n "$HUGEGRAPH_TRUST_STORE_FILE" ]; then
     TRUST_STORE_FILE_ARG="--trust-store-file $HUGEGRAPH_TRUST_STORE_FILE"
 else
     TRUST_STORE_FILE_ARG=""
 fi
 
-echo $* | grep "\--trust-store-password" > /dev/null 2>&1
+echo $* | grep "\--trust-store-password" >/dev/null 2>&1
 if [ $? -ne 0 -a -n "$HUGEGRAPH_TRUST_STORE_PASSWORD" ]; then
     TRUST_STORE_PASSWORD_ARG="--trust-store-password $HUGEGRAPH_TRUST_STORE_PASSWORD"
 else
     TRUST_STORE_PASSWORD_ARG=""
 fi
 
-for ((i=1;i<=$#;i++));
-do
-    if [ "`eval echo '$'"$i"`" == "schedule-backup" ]; then
+for ((i = 1; i <= $#; i++)); do
+    if [ "$(eval echo '$'"$i")" == "schedule-backup" ]; then
         ARGS=${*//schedule-backup/}
         bash $BIN/schedule-backup.sh $URL_ARG $GRAPH_ARG $USER_ARG $PASSWORD_ARG $TIMEOUT_ARG $TRUST_STORE_FILE_ARG $TRUST_STORE_PASSWORD_ARG ${ARGS//'*'/'\*'}
         exit $?
@@ -133,8 +132,8 @@ do
 done
 
 # Set Java options
-if [ "$JAVA_OPTIONS" = "" ] ; then
-    XMX=`calc_xmx $MIN_MEM $MAX_MEM`
+if [ "$JAVA_OPTIONS" = "" ]; then
+    XMX=$(calc_xmx $MIN_MEM $MAX_MEM)
     if [ $? -ne 0 ]; then
         echo "Failed to run bin/hugegraph, requires at least ${MIN_MEM}m free memory"
         exit 1
@@ -142,5 +141,13 @@ if [ "$JAVA_OPTIONS" = "" ] ; then
     JAVA_OPTIONS="-Xms${MIN_MEM}m -Xmx${XMX}m"
 fi
 
-exec $JAVA -Dtools.home.path=${TOP} $JAVA_OPTIONS -cp $LIB/hugegraph-tools-*.jar -Djava.ext.dirs=$LIB/ \
-org.apache.hugegraph.cmd.HugeGraphCommand $URL_ARG $GRAPH_ARG $USER_ARG $PASSWORD_ARG $TIMEOUT_ARG $TRUST_STORE_FILE_ARG $TRUST_STORE_PASSWORD_ARG "$@"
+# TODO: use xx=(/path/to/*.jar) instead
+tools_ext_jar_path=$LIB/hugegraph-tools-*.jar
+for i in "$LIB"/*.jar; do
+    tools_ext_jar_path=$tools_ext_jar_path:$i
+    export tools_ext_jar_path
+done
+
+exec $JAVA -Dtools.home.path=${TOP} $JAVA_OPTIONS -cp $tools_ext_jar_path \
+    org.apache.hugegraph.cmd.HugeGraphCommand $URL_ARG $GRAPH_ARG $USER_ARG $PASSWORD_ARG \
+    $TIMEOUT_ARG $TRUST_STORE_FILE_ARG $TRUST_STORE_PASSWORD_ARG "$@"
diff --git a/hugegraph-tools/assembly/bin/release.sh b/hugegraph-tools/assembly/bin/release.sh
index 2732429a..b3869329 100755
--- a/hugegraph-tools/assembly/bin/release.sh
+++ b/hugegraph-tools/assembly/bin/release.sh
@@ -40,18 +40,18 @@ fi
 function abs_path() {
     SOURCE="${BASH_SOURCE[0]}"
     while [ -h "$SOURCE" ]; do
-        DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+        DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
         SOURCE="$(readlink "$SOURCE")"
         [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
     done
-    echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+    echo "$(cd -P "$(dirname "$SOURCE")" && pwd)"
 }
 
 function ensure_path_writable() {
     local path=$1
     # Ensure input path exist
     if [ ! -d "${path}" ]; then
-        mkdir -p ${path}
+        mkdir -p "${path}"
         if [ $? -ne 0 ]; then
             echo "Failed to mkdir $path"
             exit 1
@@ -69,7 +69,7 @@ function replace() {
     from=$2
     to=$3
 
-    local os=`uname`
+    local os=$(uname)
     case $os in
         Darwin) sed -i '' "s!$from!$to!g" "$file" >/dev/null 2>&1 ;;
         *) sed -i "s!$from!$to!g" "$file" >/dev/null 2>&1 ;;
@@ -79,7 +79,7 @@ function replace() {
 # Ensure the project dir is valid
 ensure_path_writable $PROJECT_DIR
 
-cd $PROJECT_DIR
+cd $PROJECT_DIR || exit
 
 ################################################################################
 # Checkout release branch
@@ -92,7 +92,7 @@ fi
 
 git diff --quiet HEAD
 if [ $? -ne 0 ]; then
-    echo "There are uncommited changes in branch $BASE_BRANCH"
+    echo "There are uncommitted changes in branch $BASE_BRANCH"
     exit 1
 fi
 
@@ -113,14 +113,14 @@ fi
 # Modify README.md
 ################################################################################
 README="README.md"
-RELEASE_VERSION=`cat "pom.xml" | grep "<version>" | head -1 | awk -F '<|>' '{print $3}'`
+RELEASE_VERSION=$(cat "pom.xml" | grep "<version>" | head -1 | awk -F '<|>' '{print $3}')
 
 function update_readme_maven_version() {
     # Append version to maven repository link
     # Extract the Maven Central line, then split the badge and dependency link
-    MAVEN_LINK_LINE=`cat $README | grep 'Maven Central'`
-    OLD_MAVEN_BADGE_LINK=`echo $MAVEN_LINK_LINE | awk -F '[\\(|\\)]' '{print $2}'`
-    OLD_MAVEN_DEPEN_LINK=`echo $MAVEN_LINK_LINE | awk -F '[\\(|\\)]' '{print $4}'`
+    MAVEN_LINK_LINE=$(cat $README | grep 'Maven Central')
+    OLD_MAVEN_BADGE_LINK=$(echo $MAVEN_LINK_LINE | awk -F '[\\(|\\)]' '{print $2}')
+    OLD_MAVEN_DEPEN_LINK=$(echo $MAVEN_LINK_LINE | awk -F '[\\(|\\)]' '{print $4}')
 
     # Replace or append the branch name in maven badge link
     if [[ "$OLD_MAVEN_BADGE_LINK" =~ .*\?version=.* ]]; then
@@ -156,17 +156,17 @@ if [ ! -f "$README" ]; then
     echo "Skipping modify $README"
 else
     echo "Checkout to branch $RELEASE_BRANCH, ready to modify $README"
-    if [ `grep -c "Build Status" "$README"` -eq 1 ]; then
+    if [ $(grep -c "Build Status" "$README") -eq 1 ]; then
         # Replace old branch with new
         replace $README "branch=$BASE_BRANCH" "branch=$RELEASE_BRANCH"
         check_update_readme_status "Build Status" $?
     fi
-    if [ `grep -c "codecov" "$README"` -eq 1 ]; then
+    if [ $(grep -c "codecov" "$README") -eq 1 ]; then
         # Replace old branch with new
         replace $README "branch/$BASE_BRANCH" "branch/$RELEASE_BRANCH"
         check_update_readme_status "codecov" $?
     fi
-    if [ `grep -c "Maven Central" "$README"` -eq 1 ]; then
+    if [ $(grep -c "Maven Central" "$README") -eq 1 ]; then
         update_readme_maven_version
         check_update_readme_status "Maven Central" $?
     fi
@@ -186,32 +186,32 @@ fi
 ################################################################################
 function update_hugegraph_version() {
     # Second digit plus 1
-    BUMP_VERSION=`echo $RELEASE_VERSION | awk -F '.' '{prefix=$2}END{print $1"."prefix+1".0"}'`
+    BUMP_VERSION=$(echo $RELEASE_VERSION | awk -F '.' '{prefix=$2}END{print $1"."prefix+1".0"}')
     CORE_POM_XML_FILE="$PROJECT_DIR/hugegraph-core/pom.xml"
     CORE_VERSION_JAVA_FILE="$PROJECT_DIR/hugegraph-core/src/main/java/org/apache/hugegraph/version/CoreVersion.java"
     API_VERSION_JAVA_FILE="$PROJECT_DIR/hugegraph-api/src/main/java/org/apache/hugegraph/version/ApiVersion.java"
     # Replace Implementation-Version in core pom.xml
     replace $CORE_POM_XML_FILE "<Implementation-Version>.*</Implementation-Version>" \
-            "<Implementation-Version>$BUMP_VERSION.0</Implementation-Version>" || return 1
+        "<Implementation-Version>$BUMP_VERSION.0</Implementation-Version>" || return 1
     # Replace version in CoreVersion.java
     replace $CORE_VERSION_JAVA_FILE "Version.of(CoreVersion.class, \".*\")" \
-            "Version.of(CoreVersion.class, \"$BUMP_VERSION\")" || return 1
+        "Version.of(CoreVersion.class, \"$BUMP_VERSION\")" || return 1
     # Replace version in ApiVersion.java
     # Extract the first two digits of the version number
-    MIN_VERSION=`echo $BUMP_VERSION | awk -F '.' '{print $1"."$2}'`
+    MIN_VERSION=$(echo $BUMP_VERSION | awk -F '.' '{print $1"."$2}')
     # Second digit plus 1
-    MAX_VERSION=`echo $BUMP_VERSION | awk -F '.' '{prefix=$2}END{print $1"."prefix+1}'`
+    MAX_VERSION=$(echo $BUMP_VERSION | awk -F '.' '{prefix=$2}END{print $1"."prefix+1}')
     replace $API_VERSION_JAVA_FILE "VersionUtil.check(CoreVersion.VERSION, \".*\", \".*\", CoreVersion.NAME);" \
-            "VersionUtil.check(CoreVersion.VERSION, \"$MIN_VERSION\", \"$MAX_VERSION\", CoreVersion.NAME);" || return 1
+        "VersionUtil.check(CoreVersion.VERSION, \"$MIN_VERSION\", \"$MAX_VERSION\", CoreVersion.NAME);" || return 1
 }
 
 function update_general_component_version() {
     # Third digit plus 1
-    BUMP_VERSION=`echo $RELEASE_VERSION | awk -F '.' '{prefix=$3}END{print $1"."$2"."prefix+1}'`
+    BUMP_VERSION=$(echo $RELEASE_VERSION | awk -F '.' '{prefix=$3}END{print $1"."$2"."prefix+1}')
     POM_XML_FILE="$PROJECT_DIR/pom.xml"
     # Replace Implementation-Version in pom.xml
     replace $POM_XML_FILE "<Implementation-Version>.*</Implementation-Version>" \
-            "<Implementation-Version>$BUMP_VERSION.0</Implementation-Version>" || return 1
+        "<Implementation-Version>$BUMP_VERSION.0</Implementation-Version>" || return 1
 }
 
 function check_update_version_status() {
@@ -230,7 +230,7 @@ git checkout $BASE_BRANCH >/dev/null 2>&1 || exit 1
 echo "Checkout to branch $BASE_BRANCH, ready to bump pom version"
 
 if [ -f "pom.xml" ]; then
-    ARTIFACT=`cat "pom.xml" | grep "<artifactId>" | head -1 | awk -F '<|>' '{print $3}'`
+    ARTIFACT=$(cat "pom.xml" | grep "<artifactId>" | head -1 | awk -F '<|>' '{print $3}')
     # Bump up maven implementation version
     if [ "$ARTIFACT" = "hugegraph" ]; then
         update_hugegraph_version
diff --git a/hugegraph-tools/assembly/bin/schedule-backup.sh b/hugegraph-tools/assembly/bin/schedule-backup.sh
index bd6b480a..7318dc88 100755
--- a/hugegraph-tools/assembly/bin/schedule-backup.sh
+++ b/hugegraph-tools/assembly/bin/schedule-backup.sh
@@ -25,10 +25,11 @@ function abs_path() {
     echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
 }
 
-BIN=`abs_path`
-TOP=`dirname $BIN`
-cd $BIN
+BIN=$(abs_path)
+TOP=$(dirname "$BIN")
+cd "$BIN" || exit
 
+# TODO: $JAVA is unused now
 if [ -n "$JAVA_HOME" ]; then
     JAVA="$JAVA_HOME"/bin/java
 else
@@ -41,43 +42,43 @@ function parse_interval() {
 
 for((i=1;i<=$#;i+=2));
 do
-    current=`eval echo '${'$i'}'`
+    current=$(eval echo '${'"$i"'}')
     case "$current" in
         "--url")
-            URL=`eval echo '${'$(($i+1))'}'`
+            URL=$(eval echo '${'$((i+1))'}')
             URL_ARG="--url "$URL
             ;;
         "--graph")
-            GRAPH=`eval echo '${'$(($i+1))'}'`
+            GRAPH=$(eval echo '${'$((i+1))'}')
             GRAPH_ARG="--graph "$GRAPH
             ;;
         "--user")
-            USERNAME=`eval echo '${'$(($i+1))'}'`
+            USERNAME=$(eval echo '${'$((i+1))'}')
             USERNAME_ARG="--user "$USERNAME
             ;;
         "--password")
-            PASSWORD=`eval echo '${'$(($i+1))'}'`
+            PASSWORD=$(eval echo '${'$((i+1))'}')
             PASSWORD_ARG="--password "$PASSWORD
             ;;
         "--timeout")
-            TIMEOUT=`eval echo '${'$(($i+1))'}'`
+            TIMEOUT=$(eval echo '${'$((i+1))'}')
             TIMEOUT_ARG="--timeout "$TIMEOUT
             ;;
         "--interval")
-            position=$(($i+1))
+            position=$((i+1))
             INTERVAL=${@:$position:5}
             INTERVAL=${INTERVAL//\\/}
-            let i+=4
+            (( i+=4 ))
             ;;
         "--backup-num")
-            NUM=`eval echo '${'$(($i+1))'}'`
+            NUM=$(eval echo '${'$((i+1))'}')
             ;;
         "--directory"|"-d")
-            DIR=`eval echo '${'$(($i+1))'}'`
+            DIR=$(eval echo '${'$((i+1))'}')
             ;;
         *)
             echo "Invalid argument: $current"
-            bash $BIN/hugegraph
+            bash "$BIN"/hugegraph
             exit 1
     esac
 done
@@ -86,12 +87,12 @@ if [ -z "$DIR" ]; then
     echo "Must provide backup directory"
     exit 1
 else
-    if [ ${DIR:0:1} != "/" ]; then
+    if [ "${DIR:0:1}" != "/" ]; then
         DIR=$TOP"/"$DIR
     fi
 fi
 
-DIR=`dirname $DIR`/`basename $DIR`
+DIR=$(dirname $DIR)/$(basename $DIR)
 
 if [ -z "$GRAPH" ]; then
     GRAPH="hugegraph"
diff --git a/hugegraph-tools/assembly/bin/start-all.sh b/hugegraph-tools/assembly/bin/start-all.sh
index 48330d28..2e3c1b54 100755
--- a/hugegraph-tools/assembly/bin/start-all.sh
+++ b/hugegraph-tools/assembly/bin/start-all.sh
@@ -39,37 +39,37 @@ fi
 function abs_path() {
     SOURCE="${BASH_SOURCE[0]}"
     while [ -h "$SOURCE" ]; do
-        DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+        DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
         SOURCE="$(readlink "$SOURCE")"
         [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
     done
-    echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+    echo "$(cd -P "$(dirname "$SOURCE")" && pwd)"
 }
 
-BIN=`abs_path`
-. ${BIN}/util.sh
+BIN=$(abs_path)
+. "${BIN}"/util.sh
 
-`ensure_path_writable ${INSTALL_PATH}`
+ensure_path_writable "${INSTALL_PATH}"
 
 # Convert to absolute path
 INSTALL_PATH="$(cd ${INSTALL_PATH} && pwd)"
 
-cd ${BIN}
+cd ${BIN} || exit
 
 # Check input version can be found in version-map.yaml
-OPTIONAL_VERSIONS=`cat version-map.yaml | grep 'version' | awk -F ':' '{print $1}' | xargs`
-if [[ ! "$OPTIONAL_VERSIONS" =~ "$VERSION" ]]; then
+OPTIONAL_VERSIONS=$(cat version-map.yaml | grep 'version' | awk -F ':' '{print $1}' | xargs)
+if [[ ! "$OPTIONAL_VERSIONS" =~ $VERSION ]]; then
     echo "Invalid version '${VERSION}' for hugegraph, the optional values are [$OPTIONAL_VERSIONS]"
     exit 1
 fi
 
 # Parse module version from 'version-map.yaml'
-SERVER_VERSION=`parse_yaml version-map.yaml "${VERSION}" "server"`
+SERVER_VERSION=$(parse_yaml version-map.yaml "${VERSION}" "server")
 if [ "$SERVER_VERSION" = "" ]; then
     echo "Please check the format and content of file 'version-map.yaml' is normal"
     exit 1
 fi
-STUDIO_VERSION=`parse_yaml version-map.yaml "${VERSION}" "studio"`
+STUDIO_VERSION=$(parse_yaml version-map.yaml "${VERSION}" "studio")
 if [ "$STUDIO_VERSION" = "" ]; then
     echo "Please check the format and content of file 'version-map.yaml' is normal"
     exit 1
@@ -89,7 +89,7 @@ if [ ! -d "${STUDIO_DIR}" ]; then
 fi
 
 function start_hugegraph_server() {
-    $SERVER_DIR/bin/start-hugegraph.sh
+    "$SERVER_DIR"/bin/start-hugegraph.sh
     if [ $? -ne 0 ]; then
         echo "Failed to start HugeGraphServer, please check the logs under '$SERVER_DIR/logs' for details"
         exit 1
@@ -98,10 +98,10 @@ function start_hugegraph_server() {
 
 function start_hugegraph_studio() {
     # TODO: Let hugegraph-studio.sh can execute in any directory instead of $STUDIO_DIR
-    cd $STUDIO_DIR
+    cd $STUDIO_DIR || exit
 
-    local server_host=`read_property "conf/hugegraph-studio.properties" "studio.server.host"`
-    local server_port=`read_property "conf/hugegraph-studio.properties" "studio.server.port"`
+    local server_host=$(read_property "conf/hugegraph-studio.properties" "studio.server.host")
+    local server_port=$(read_property "conf/hugegraph-studio.properties" "studio.server.port")
     local server_url="http://${server_host}:${server_port}"
     local start_timeout_s=20
 
diff --git a/hugegraph-tools/assembly/bin/stop-all.sh b/hugegraph-tools/assembly/bin/stop-all.sh
index ef7328dd..ce397ec3 100755
--- a/hugegraph-tools/assembly/bin/stop-all.sh
+++ b/hugegraph-tools/assembly/bin/stop-all.sh
@@ -18,22 +18,22 @@
 function abs_path() {
     SOURCE="${BASH_SOURCE[0]}"
     while [ -h "$SOURCE" ]; do
-        DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+        DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
         SOURCE="$(readlink "$SOURCE")"
         [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
     done
-    echo "$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+    echo "$(cd -P "$(dirname "$SOURCE")" && pwd)"
 }
 
-BIN=`abs_path`
-cd $BIN
+BIN=$(abs_path)
+cd "$BIN" || exit
 
 . util.sh
 
 SLEEP_INTERVAL_S=2
 SHUTDOWN_TIMEOUT_S=10
 
-kill_process      'HugeGraphServer'
+kill_process 'HugeGraphServer'
 wait_for_shutdown 'HugeGraphServer' $SHUTDOWN_TIMEOUT_S
-kill_process      'HugeGraphStudio'
+kill_process 'HugeGraphStudio'
 wait_for_shutdown 'HugeGraphStudio' $SHUTDOWN_TIMEOUT_S
diff --git a/hugegraph-tools/assembly/bin/util.sh b/hugegraph-tools/assembly/bin/util.sh
index a32a85d1..4f754506 100755
--- a/hugegraph-tools/assembly/bin/util.sh
+++ b/hugegraph-tools/assembly/bin/util.sh
@@ -28,7 +28,7 @@ function read_property() {
     # file path
     file_name=$1
     # replace "." to "\."
-    property_name=`echo $2 | sed 's/\./\\\./g'`
+    property_name=$(echo $2 | sed 's/\./\\\./g')
     cat $file_name | sed -n -e "s/^[ ]*//g;/^#/d;s/^$property_name=//p" | tail -1
 }
 
@@ -37,7 +37,7 @@ function write_property() {
     local key=$2
     local value=$3
 
-    local os=`uname`
+    local os=$(uname)
     case $os in
         # Note: in mac os should use sed -i '' "xxx" to replace string,
         # otherwise prompt 'command c expects \ followed by text'.
@@ -52,7 +52,7 @@ function parse_yaml() {
     local version=$2
     local module=$3
 
-    cat $file | tr -d '\n {}'| awk -F',+|:' '''{
+    cat $file | tr -d '\n {}' | awk -F',+|:' '''{
         pre="";
         for(i=1; i<=NF; ) {
             if(match($i, /version/)) {
@@ -63,23 +63,23 @@ function parse_yaml() {
                 i+=2
             }
         }
-    } END {for(e in result) {print e": "result[e]}}''' \
-    | grep "$version-$module" | awk -F':' '{print $2}' | tr -d ' ' && echo
+    } END {for(e in result) {print e": "result[e]}}''' |
+        grep "$version-$module" | awk -F':' '{print $2}' | tr -d ' ' && echo
 }
 
 function process_num() {
-    num=`ps -ef | grep $1 | grep -v grep | wc -l`
+    num=$(ps -ef | grep $1 | grep -v grep | wc -l)
     return $num
 }
 
 function process_id() {
-    pid=`ps -ef | grep $1 | grep -v grep | awk '{print $2}'`
+    pid=$(ps -ef | grep $1 | grep -v grep | awk '{print $2}')
     return $pid
 }
 
 # check the port of rest server is occupied
 function check_port() {
-    local port=`echo $1 | awk -F':' '{print $3}'`
+    local port=$(echo $1 | awk -F':' '{print $3}')
     if ! command_available "lsof"; then
         echo "Required lsof but it is unavailable"
         exit 1
@@ -99,7 +99,10 @@ function crontab_append() {
     if [ $? -eq 0 ]; then
         return 1
     fi
-    (crontab -l ; echo "$job") | crontab -
+    (
+        crontab -l
+        echo "$job"
+    ) | crontab -
 }
 
 function crontab_remove() {
@@ -110,7 +113,7 @@ function crontab_remove() {
         return 0
     fi
 
-    crontab -l | grep -Fv "$job"  | crontab -
+    crontab -l | grep -Fv "$job" | crontab -
 
     # Check exist after remove
     crontab -l | grep -F "$job" >/dev/null 2>&1
@@ -127,21 +130,21 @@ function wait_for_startup() {
     local server_url="$2"
     local timeout_s="$3"
 
-    local now_s=`date '+%s'`
-    local stop_s=$(( $now_s + $timeout_s ))
+    local now_s=$(date '+%s')
+    local stop_s=$((now_s + timeout_s))
 
     local status
 
     echo -n "Connecting to $server_name ($server_url)"
     while [ $now_s -le $stop_s ]; do
         echo -n .
-        status=`curl -o /dev/null -s -w %{http_code} $server_url`
+        status=$(curl -o /dev/null -s -w %{http_code} $server_url)
         if [ $status -eq 200 ]; then
             echo "OK"
             return 0
         fi
         sleep 2
-        now_s=`date '+%s'`
+        now_s=$(date '+%s')
     done
 
     echo "The operation timed out when attempting to connect to $server_url" >&2
@@ -150,22 +153,22 @@ function wait_for_startup() {
 
 function free_memory() {
     local free=""
-    local os=`uname`
+    local os=$(uname)
     if [ "$os" == "Linux" ]; then
-        local mem_free=`cat /proc/meminfo | grep -w "MemFree" | awk '{print $2}'`
-        local mem_buffer=`cat /proc/meminfo | grep -w "Buffers" | awk '{print $2}'`
-        local mem_cached=`cat /proc/meminfo | grep -w "Cached" | awk '{print $2}'`
+        local mem_free=$(cat /proc/meminfo | grep -w "MemFree" | awk '{print $2}')
+        local mem_buffer=$(cat /proc/meminfo | grep -w "Buffers" | awk '{print $2}')
+        local mem_cached=$(cat /proc/meminfo | grep -w "Cached" | awk '{print $2}')
         if [[ "$mem_free" == "" || "$mem_buffer" == "" || "$mem_cached" == "" ]]; then
             echo "Failed to get free memory"
             exit 1
         fi
-        free=`expr $mem_free + $mem_buffer + $mem_cached`
-        free=`expr $free / 1024`
+        free=$(expr $mem_free + $mem_buffer + $mem_cached)
+        free=$(expr $free / 1024)
     elif [ "$os" == "Darwin" ]; then
-        local pages_free=`vm_stat | awk '/Pages free/{print $0}' | awk -F'[:.]+' '{print $2}' | tr -d " "`
-        local pages_inactive=`vm_stat | awk '/Pages inactive/{print $0}' | awk -F'[:.]+' '{print $2}' | tr -d " "`
-        local pages_available=`expr $pages_free + $pages_inactive`
-        free=`expr $pages_available \* 4096 / 1024 / 1024`
+        local pages_free=$(vm_stat | awk '/Pages free/{print $0}' | awk -F'[:.]+' '{print $2}' | tr -d " ")
+        local pages_inactive=$(vm_stat | awk '/Pages inactive/{print $0}' | awk -F'[:.]+' '{print $2}' | tr -d " ")
+        local pages_available=$(expr $pages_free + $pages_inactive)
+        free=$(expr $pages_available \* 4096 / 1024 / 1024)
     else
         echo "Unsupported operating system $os"
         exit 1
@@ -177,8 +180,8 @@ function calc_xmx() {
     local min_mem=$1
     local max_mem=$2
     # Get machine available memory
-    local free=`free_memory`
-    local half_free=$[free/2]
+    local free=$(free_memory)
+    local half_free=$((free / 2))
 
     local xmx=$min_mem
     if [[ "$free" -lt "$min_mem" ]]; then
@@ -226,29 +229,29 @@ function ensure_path_writable() {
 }
 
 function get_ip() {
-    local os=`uname`
+    local os=$(uname)
     local loopback="127.0.0.1"
     local ip=""
     case $os in
         Linux)
             if command_available "ifconfig"; then
-                ip=`ifconfig | grep 'inet addr:' | grep -v "$loopback" | cut -d: -f2 | awk '{ print $1}'`
+                ip=$(ifconfig | grep 'inet addr:' | grep -v "$loopback" | cut -d: -f2 | awk '{ print $1}')
             elif command_available "ip"; then
-                ip=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'`
+                ip=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}')
             else
                 ip=$loopback
             fi
             ;;
         FreeBSD|OpenBSD|Darwin)
             if command_available "ifconfig"; then
-                ip=`ifconfig | grep -E 'inet.[0-9]' | grep -v "$loopback" | awk '{ print $2}'`
+                ip=$(ifconfig | grep -E 'inet.[0-9]' | grep -v "$loopback" | awk '{ print $2}')
             else
                 ip=$loopback
             fi
             ;;
         SunOS)
             if command_available "ifconfig"; then
-                ip=`ifconfig -a | grep inet | grep -v "$loopback" | awk '{ print $2} '`
+                ip=$(ifconfig -a | grep inet | grep -v "$loopback" | awk '{ print $2} ')
             else
                 ip=$loopback
             fi
@@ -306,8 +309,8 @@ function wait_for_shutdown() {
     local p_name="$1"
     local timeout_s="$2"
 
-    local now_s=`date '+%s'`
-    local stop_s=$(( $now_s + $timeout_s ))
+    local now_s=$(date '+%s')
+    local stop_s=$((now_s + timeout_s))
 
     while [ $now_s -le $stop_s ]; do
         process_status "$p_name" >/dev/null
@@ -316,7 +319,7 @@ function wait_for_shutdown() {
             return 0
         fi
         sleep 2
-        now_s=`date '+%s'`
+        now_s=$(date '+%s')
     done
 
     echo "$p_name shutdown timeout(exceeded $timeout_s seconds)" >&2
@@ -324,7 +327,7 @@ function wait_for_shutdown() {
 }
 
 function process_status() {
-    local p=`ps -ef | grep "$1" | grep -v grep | awk '{print $2}'`
+    local p=$(ps -ef | grep "$1" | grep -v grep | awk '{print $2}')
     if [ -n "$p" ]; then
         echo "$1 is running with pid $p"
         return 0
@@ -335,20 +338,19 @@ function process_status() {
 }
 
 function kill_process() {
-    local pids=`ps -ef | grep "$1" | grep -v grep | awk '{print $2}' | xargs`
+    local pids=$(ps -ef | grep "$1" | grep -v grep | awk '{print $2}' | xargs)
 
     if [ "$pids" = "" ]; then
         echo "There is no $1 process"
     fi
 
-    for pid in ${pids[@]}
-    do
+    for pid in "${pids[@]}"; do
         if [ -z "$pid" ]; then
             echo "The process $1 does not exist"
             return
         fi
         echo "Killing $1 (pid $pid)..." >&2
-        case "`uname`" in
+        case "$(uname)" in
             CYGWIN*) taskkill /F /PID "$pid" ;;
             *)       kill "$pid" ;;
         esac
diff --git a/hugegraph-tools/build.sh b/hugegraph-tools/build.sh
deleted file mode 100644
index 24e65521..00000000
--- a/hugegraph-tools/build.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-export MAVEN_HOME="/home/scmtools/buildkit/maven/apache-maven-3.3.9/"
-export JAVA_HOME="/home/scmtools/buildkit/java/jdk1.8.0_25/"
-export PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH"
-
-mvn clean compile
\ No newline at end of file