







1.$0
表示当前脚本本身的路径(包含文件名),示例:如果脚本在 /home/user/projects/bin/start.sh,那么 $0 就是 /home/user/projects/bin/start.sh
2.dirname $0
dirname 命令用于提取路径的目录部分(去掉文件名)
dirname /home/user/projects/bin/start.sh # 输出 /home/user/projects/bin
dirname ./bin/start.sh # 输出 ./bin
3.SCRIPTNAME=$(basename $0)
SCRIPTNAME= 定义一个变量,名为 SCRIPTNAME
$(...) 命令替换,先执行括号内的命令,将输出结果赋值给变量
basename 一个 Linux 命令,用于去除路径中的目录部分,只保留最后的文件名
$0 Shell 特殊变量,表示当前脚本的完整路径和名称(启动脚本时传入的第一个参数)
示例脚本:
#!/bin/bash
# 获取脚本名称
SCRIPTNAME=$(basename $0)
# 获取脚本所在目录的父级目录
BASEDIR=$(cd $(dirname $0)/..; pwd -P)
# 检查配置文件是否存在
CONFIG_FILE="$BASEDIR/config/application.yml"
if [ ! -f "$CONFIG_FILE" ]; then
echo "[$SCRIPTNAME] 错误:配置文件不存在 $CONFIG_FILE"
exit 1
fi
# 记录启动日志
echo "[$SCRIPTNAME] 启动时间: $(date)"
echo "[$SCRIPTNAME] 项目目录: $BASEDIR"
# 启动应用
echo "[$SCRIPTNAME] 正在启动服务..."
执行结果(假设脚本名为 start.sh):
假设你的脚本文件位于 /home/user/projects/bin/start.sh
[start.sh] 启动时间: Thu Sep 4 10:00:00 CST 2026
[start.sh] 项目目录: /home/user/myproject
[start.sh] 正在启动服务...
在实际脚本中,basename 和 dirname 通常配合使用:
# 获取脚本所在的目录
SCRIPT_DIR=$(dirname $0) # 例如:/home/user/projects/bin
# 获取脚本名称
SCRIPT_NAME=$(basename $0) # 例如:start.sh
# 获取项目根目录(父级目录)
BASEDIR=$(cd $SCRIPT_DIR/..; pwd -P)
4.if [[ -f ${BASEDIR}/bin/run.conf ]]; then
整体含义: 如果 ${BASEDIR}/bin/run.conf 这个普通文件存在,则执行 then 分支的代码。
[[ ... ]] Bash 的增强测试结构(比 [ ... ] 更强大,支持更多操作符)
-f 文件测试运算符,检查是否为"普通文件"(regular file)且存在
${BASEDIR}/bin/run.conf 被测试的文件路径,BASEDIR 是之前定义的变量
-z 检查字符串是否为空
VAR="hello"
[[ -z "$VAR" ]] # false
# 检查用户是否输入了参数
if [[ -z "$1" ]]; then
echo "错误:缺少参数!"
echo "用法: $0 <文件名>"
exit 1
fi
# 检查配置文件路径是否为空
if [[ -z "$CONFIG_FILE" ]]; then
CONFIG_FILE="/etc/default/app.conf"
fi
--
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。