Shell脚本跨月执行目录报错求助,及上级目录切换方法
我来帮你搞定这两个Shell脚本的问题:
1. 切换至上一级目录的方法
在Shell脚本里切换到当前工作目录的上一级,最直接的命令就是:
cd ..
如果想更严谨一点,避免后续操作因为目录切换失败而出错,可以加上失败判断:
cd .. || { echo "切换至上一级目录失败,请检查权限或目录存在性"; exit 1; }
这样一旦切换失败,脚本会立刻报错退出,不会继续执行后续可能出问题的代码。
2. 固定操作目录,解决跨月访问报错问题
你遇到的跨月报错,本质是用了相对路径(比如../2018/02)动态拼接月份,但下个月的目录还没创建。现在要指定到固定的/home/application/Files/output/2018/01/30目录,直接用绝对路径就能彻底解决这个问题,步骤如下:
方法一:直接切换到固定目录
在脚本里添加以下代码,直接定位到目标目录:
# 定义目标目录(用变量方便后续修改) TARGET_DIR="/home/application/Files/output/2018/01/30" # 切换到目标目录,失败则报错退出 cd "$TARGET_DIR" || { echo "无法切换到目标目录:$TARGET_DIR,请检查路径或权限"; exit 1; }
方法二:先确保目录存在再切换(可选)
如果担心这个固定目录可能不存在,可以先检查并创建(递归创建所有父目录):
TARGET_DIR="/home/application/Files/output/2018/01/30" # 检查目录是否存在,不存在则递归创建 if [ ! -d "$TARGET_DIR" ]; then mkdir -p "$TARGET_DIR" || { echo "创建目录失败:$TARGET_DIR"; exit 1; } fi # 切换到目标目录 cd "$TARGET_DIR" || { echo "切换目录失败:$TARGET_DIR"; exit 1; }
用绝对路径后,不管脚本在哪里执行、当前是什么月份,都会精准定位到你指定的目录,再也不会出现访问未创建目录的问题了。
内容的提问来源于stack exchange,提问作者Satya




