Bash common script snippets
Get some common variables:
# 获取当前脚本所在目录
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
# 获取当前脚本的文件名
SCRIPT_NAME=$( basename "$0" )
# 在 $DIR 中搜索第一个 jar 文件的名字
JAR_FILE=$(find $DIR -maxdepth 1 -type f -name "*.jar" | head -1)
Some common judgments:
# 判断变量是否为空
if [ -z "$VAR" ]; then
echo "\$VAR is empty"
else
echo "\$VAR is $VAR"
fi
# 判断路径是否存在
# -d 表示目录,-f 表示文件
if [ -d "$PATH" ]; then
echo "File $PATH exists"
else
echo "File $PATH not found"
fi
# 判断当前用户是否是 root
if [ "${EUID:-$(id -u)}" -eq 0 ]; then
do_root_stuff
fi
# 判断 docker 命令能否执行
if ! command -v docker &> /dev/null; then
echo "当前系统不能运行 docker 命令"
fi
Search process ID based on keywords in process start command
# set pid=$(get_pid "some-service-name")
get_pid() {
SERVICE_NAME=$1
PID=$(ps aux | grep "[${SERVICE_NAME:0:1}]${SERVICE_NAME:1}" | awk '{print $2}')
echo "$PID"
}
Generic way to parse and query command line arguments
This script is very useful, you just need to add the following at the beginning of your script to parse the parameters in the format --param value
Since this script is written as short as possible and does not take up space, the format requires all parameters to have values. For example, --daemon
--daemon true
must be passed.
### 解析命令行参数
PARAMS_ARR=()
while (( "$#" )); do
case "$1" in --*) PARAMS_ARR+=($1); shift;; *) PARAMS_ARR[-1]="${PARAMS_ARR[-1]} $1"; shift;; esac
done
### 获取命令行参数,如果没有则返回默认值
### 示例:value=$(get_param "param_name" "default_value")
function get_param {
for param in "${PARAMS_ARR[@]}"; do if [[ $param =~ "--$1" ]]; then echo ${param#"--$1"} && return 0; fi done
echo $2
}
### 获取命令行参数,如果没有则报错退出(退出机制需要 set -e 来开启,否则你就要自行处理返回值)
### 示例:value=$(get_param_required "param_name")
function get_param_required {
for param in "${PARAMS_ARR[@]}"; do if [[ $param =~ "--$1" ]]; then echo ${param#"--$1"} && return 0; fi done
echo -e "\e[31mParameter '$1' is required\e[m" >&2 && return 1
}
set -e
Parse the parameter value as an array from the above script
If the parameter value is more than one, it can be extracted into an array with the following statement:
# 假设要提取名为 PARAM_NAME 的参数值赋给数组 ARR,可以用下面一行
IFS=', ' read -r -a ARR <<< $(get_param PARAM_NAME)
# 这里多个参数值可以用逗号或空格隔开,例如 "--values a,b, c d",
# 解析出来的数组元素不会包含空白字符
# 检查解析结果
echo "ARR size: ${#ARR[@]}"
echo "ARR content: ${ARR[@]}"
捏造的信仰
Java 开发人员
推荐阅读
Spark 集群执行任务失败的故障处理
在 Spark Master 管理界面上看到任务的 Driver 地址不是真实 IP 地址,而是一个叫做“host.containers.internal”的主机名;
捏造的信仰阅读 694
免费1年服务器,部署个ChatGPT专属网页版
api.openai.com port 443: Connection timed out 你是不在调用 ChatGPT 接口的时候报错 443 了,哈哈哈,我的也是。当小傅哥发现自己开发的《ChatGPT AI 问答助手》已经不工作了,搜索了下为啥会 443 呢,原来是 ...
小傅哥赞 3阅读 1.6k
蚂蚁安全科技 Nydus 镜像加速实践
蚂蚁安全科技 Nydus 镜像加速实践原创 曦栖 金融级分布式架构文|蚂蚁集团 ZOLOZ 团队使用全球领先安全科技,为用户和机构提供安全、便捷的安全风控解决方案。本文 6386 字 阅读 12 分钟背景简介ZOLOZ[1]是蚂蚁集...
SOFAStack赞 1阅读 3.8k
git/pip/easy_install/apt代理/源设置
在公司内网环境中,访问公网往往需要经过公司的代理,对于浏览器、IDE等开发工具,都提供了设置代理的配置,而git、pip、easy_install等CLI工具,则需要通过命令或配置文件进行代理设置;对于Python、Ubuntu、Mav...
乘着风赞 1阅读 5.6k
Laravel入门及实践,快速上手ThinkSNS+二次开发
【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门。
ThinkSNS赞 1阅读 2.5k
C++编译器和链接器的完全指南
C++是一种强类型语言,它的编译和链接是程序开发过程中不可或缺的两个环节。编译器和链接器是两个非常重要的概念。本文将详细介绍C++中的编译器和链接器以及它们的工作原理和使用方法。
小万哥赞 2阅读 1.1k
confluence7.2.1的部署与迁移---呕心沥血版
Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。 到官网下载最新版本,截止目前...
暗涌阅读 7.9k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。