#!/usr/bin/env bash
set -o errexit
set -o errtrace
set -o nounset
set -o pipefail
TAG="CMD"
LOG_PATH="/tmp/shell/logs"
LOG_FILE="${LOG_PATH}/install_nodejs_$(date +"%Y%m%d").log"
HIDE_LOG=true
nodejs_version="v18.12.0"
nodejs_package="node-${nodejs_version}-linux-x64.tar.xz"
nodejs_dir="node-${nodejs_version}-linux-x64"
function log() {
[ ! -d "${LOG_PATH}" ] && mkdir -p "${LOG_PATH}"
if [ $HIDE_LOG ]; then
echo -e "[$(date +"%Y/%m/%d:%H:%M:%S %z")] [$(whoami)] [$TAG]" "${@}" >> "${LOG_FILE}"
else
echo "[$(date +"%Y/%m/%d:%H:%M:%S %z")] [$(whoami)] [$TAG]" "${@}" | tee -a "${LOG_FILE}"
fi
}
function script_trap_err() {
local exit_code=1
trap - ERR
set +o errexit
set +o pipefail
log "[E] ERROR" "${@}"
status_closure clear_go_env
exit "$exit_code"
}
function script_trap_exit() {
log "[I] shell exec done."
}
function print_color () {
case $1 in
red) echo -e "\033[31m$2 \033[0m" ;;
green) echo -e "\033[32m$2 \033[0m" ;;
yellow) echo -e "\033[33m$2 \033[0m" ;;
blue) echo -e "\033[34m$2 \033[0m" ;;
*) echo -e "\033[31m[Color Error]$2 \033[0m" ;;
esac
}
function status_closure () {
print_color "green" "${1}"
eval "${*}"
print_color "green" "${1} executed successfully"
}
function help() {
echo "Usage: ./install_nodejs.sh [-h -r] [-v version]"
echo " -h : display this help and exit"
echo " -v : input nodejs version default v18.12.0"
echo " -r : remove nodejs env and exit"
exit 0
}
function download_node_pkg() {
mkdir -p "${HOME}"/tools
print_color "blue" "download nodejs pkg in ${HOME}/tools/"
if [ ! -f "${HOME}"/tools/"${nodejs_package}" ]
then
wget -P "${HOME}"/tools https://nodejs.org/dist/"${nodejs_version}"/"${nodejs_package}"
fi
}
function install_node_pkg() {
if [ ! -d /usr/local/"${nodejs_dir}" ]
then
sudo tar -xf "${HOME}"/tools/"${nodejs_package}" -C /usr/local/
print_color "green" "unarchive_node_pkg executed successfully"
else
print_color "blue" "/usr/local/node directory already exists"
if [ -d /usr/local/node ]
then
sudo rm -rf /usr/local/node
fi
fi
sudo ln -s /usr/local/"${nodejs_dir}" /usr/local/node
sudo ln -s /usr/local/node/bin/npm /usr/local/bin/
sudo ln -s /usr/local/node/bin/node /usr/local/bin/
}
function create_node_path() {
if [ ! -d "${HOME}"/node/ ]
then
mkdir -p "${HOME}"/node/
print_color "blue" "create node path in ${HOME}/node/"
fi
}
function run_install_node() {
status_closure download_node_pkg
status_closure install_node_pkg
status_closure create_node_path
print_color "green" "node-${nodejs_version} installation completed!"
print_color "yellow" "exec node -v and npm -v after installation completed !!!"
print_color "green" "node -v:" && node -v
print_color "green" "npm -v:" && npm -v
}
function clear_node_env() {
sudo rm -rf "${HOME}"/node && \
sudo rm -rf "${HOME}"/tools/node* && \
sudo rm -rf /usr/local/node* && \
sudo rm -rf /usr/local/bin/node && \
sudo rm -rf /usr/local/bin/npm && \
print_color "green" "node env clear completed!"
}
function main() {
trap script_trap_err INT TERM QUIT HUP ERR
trap script_trap_exit EXIT
log "[I] shell start"
if [ $# -ne 0 ]
then
case $1 in
-h|help)
help
;;
-v|version)
nodejs_version=$2
nodejs_package="node-${nodejs_version}-linux-x64.tar.xz"
nodejs_dir="node-${nodejs_version}-linux-x64"
status_closure run_install_node
;;
-r|remove)
status_closure clear_node_env
;;
*)
print_color "red" "unknown parameter" && help
;;
esac
else
status_closure run_install_node
fi
}
main "${@}"