如何编写Bash单行脚本:检查变量匹配与目录是否存在?
Bash脚本字符串匹配+目录存在检查的正确写法
你的代码逻辑本身没问题,但执行失败大概率是这几个原因:
/debug目录不存在或者当前用户没有读写权限/etc/apache2/httpd.conf文件不存在- 变量
DEBUG被意外修改(比如变成True/true这类大小写不一致的值)
如果要更严谨,建议写成带错误提示的版本,方便排查问题:
DEBUG="TRUE" if [[ "${DEBUG}" == "TRUE" && -d "/debug" ]]; then if cp /etc/apache2/httpd.conf /debug/httpd.BEFORE.conf; then echo "配置文件备份成功" else echo "备份失败:无法读取源文件或写入目标目录" >&2 fi else [[ "${DEBUG}" != "TRUE" ]] && echo "DEBUG模式未开启" >&2 [[ ! -d "/debug" ]] && echo "/debug目录不存在或不是有效目录" >&2 fi
如果非要保持一行命令的形式,也可以优化成更稳妥的写法:
DEBUG="TRUE" [[ "${DEBUG}" == "TRUE" && -d "/debug" ]] && cp /etc/apache2/httpd.conf /debug/httpd.BEFORE.conf || echo "操作失败:DEBUG模式未开启或/debug目录无效" >&2
关键注意事项:
- 给变量和路径加上双引号,避免空格、特殊字符导致的解析错误
- 若
/debug是符号链接指向目录,需要用[[ -L /debug && -d /debug ]]来同时检查链接有效性和目标目录存在性 - 确保执行脚本的用户对
/debug有写入权限,对/etc/apache2/httpd.conf有读取权限
内容的提问来源于stack exchange,提问作者J. Scott Elblein
相关产品推荐
相关产品推荐

