Bash 常用脚本片段
获取一些常用变量:
# 获取当前脚本所在目录
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)
一些常用的判断:
# 判断变量是否为空
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
根据进程启动命令中的关键字搜索进程ID
# 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"
}
解析并查询命令行参数的通用方法
这段脚本非常有用,你只要在你的脚本开头加上下面的内容,就能以 --param value
的格式解析参数。由于这段脚本尽可能写的短小不占空间,所以格式方面会要求所有的参数都有值,例如不接受无参数的 --daemon
,而必须传 --daemon true
。
### 解析命令行参数
PARAMS_ARR=()
while (( "$#" )); do
case "$1" in --*) PARAMS_ARR+=($1); shift;; *) PARAMS_ARR[${#PARAMS_ARR[@]}-1]="${PARAMS_ARR[${#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
从上面的脚本中解析参数值为数组
如果参数值为多个,则可以用下面的语句提取成数组:
# 假设要提取名为 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”的主机名;
捏造的信仰阅读 457
使用kubeasz部署高可用kubernetes集群
本实验采用kubeasz作为kubernetes环境部署工具,它是一个基于二进制方式部署和利用ansible-playbook实现自动化来快速部署高可用kubernetes集群的工具,详细介绍请查看kubeasz官方。本实验用到的所有虚拟机默认软...
李朝阳赞 4阅读 789
git/pip/easy_install/apt代理/源设置
在公司内网环境中,访问公网往往需要经过公司的代理,对于浏览器、IDE等开发工具,都提供了设置代理的配置,而git、pip、easy_install等CLI工具,则需要通过命令或配置文件进行代理设置;对于Python、Ubuntu、Mav...
乘着风赞 1阅读 5.2k
Ubuntu20.04 从源代码编译安装 python3.10
Ubuntu 22.04 Release DateUbuntu 22.04 Jammy Jellyfish is scheduled for release on April 21, 2022If you’re ready to use Ubuntu 22.04 Jammy Jellyfish, you can either upgrade your current Ubuntu syste...
ponponon赞 1阅读 4.6k评论 1
麒麟操作系统 (kylinos) 从入门到精通 - 故障排查篇
OS平台:银河麒麟桌面操作系统(飞腾版)V10 SP1操作系统镜像:Kylin-Desktop-V10-SP1-General-Release-2203-ARM64
Oulaa赞 3阅读 1.6k
免费1年服务器,部署个ChatGPT专属网页版
api.openai.com port 443: Connection timed out 你是不在调用 ChatGPT 接口的时候报错 443 了,哈哈哈,我的也是。当小傅哥发现自己开发的《ChatGPT AI 问答助手》已经不工作了,搜索了下为啥会 443 呢,原来是 ...
小傅哥赞 2阅读 359
linux中用户登录加载配置文件的过程
shell的类型(站在用户登录登录的角度)登录式shell正常通过某终端登录su - USERNAMEsu -l USERNAME非登录式shellsu USERNAME图形终端下打开命令窗口自动执行的shell脚本用户登录时相关的bash配置文件全局配置文件/...
Dabric阅读 5.3k评论 3
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。