You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本文件存在性判断无输出问题求助

Bash脚本文件存在判断无输出问题排查

问题描述

编写的Bash脚本用于判断指定目录下的GFS系列文件是否存在,并返回对应的天数,但实际存在GFS_72文件时,脚本未输出预期的3 days,无任何输出。

问题代码

#!/bin/bash 
FECHA=$(date +%Y-%m-%d)
FECHAD=$(date +%d)
FECHAM=$(date +%m)
FECHAA=$(date +%Y)

DIRECTORY="/home/usuario/Build_WRF/DATA/"
FILE1=$DIRECTORY"GFS_24"
FILE2=$DIRECTORY"GFS_48"
FILE3=$DIRECTORY"GFS_72"
FILE4=$DIRECTORY"GFS_96"
FILE5=$DIRECTORY"GFS_120"
FILE6=$DIRECTORY"GFS_144"
FILE7=$DIRECTORY"GFS_168"
FILE8=$DIRECTORY"GFS_192"
FILE9=$DIRECTORY"GFS_216"
FILE10=$DIRECTORY"GFS_240"

if [ -f $FILE10 ]; then
        dias="10 days"
        echo $dias
elif [ -f $FILE9 ]; then
        dias="9 days"
        echo $dias
elif [ -f $FILE8 ]; then
        dias="8 days"
        echo $dias
elif [ -f $FILE7 ]; then
        dias="7 days"
        echo $dias
elif [ -f $FILE6 ]; then
        dias="6 days"
        echo $dias
elif [ -f $FILE5 ]; then
        dias="5 days"
        echo $dias
elif [ -f $FILE4 ]; then
    dias="4 days"
        echo $dias
elif [ -f $FILE3 ]; then
    dias="3 days"
        echo $dias
elif [ -f $FILE2 ]; then
    dias="2 days"
        echo $dias
elif [ -f $FILE1 ]; then
    dias="1 day"
        echo $dias
else
    exit
fi

FECHAF=$(date +%Y-%m-%d --date="$dias")
FECHAFD=$(date +%d --date="$dias")
FECHAFM=$(date +%m --date="$dias")
FECHAFA=$(date +%Y --date="$dias")

问题原因分析

  1. 逻辑优先级问题:脚本从最大的FILE10开始向下判断,如果FILE4到FILE10中任意一个文件实际存在,脚本会优先匹配该分支,不会走到FILE3的判断。需确认是否只有GFS_72存在,更大的GFS文件(如GFS_96、GFS_120等)不存在。
  2. 路径或文件名错误:需验证DIRECTORY路径是否正确(比如usuario是否为当前实际用户名),实际文件名是否与脚本中的GFS_72完全一致(包括大小写、有无后缀)。
  3. 权限不足:脚本运行用户没有/home/usuario/Build_WRF/DATA/目录的读取权限,导致[ -f $FILE3 ]判断返回假。
  4. 未进入任何分支:如果所有文件判断都不成立,脚本会执行else分支直接exit,无任何输出。

解决方法

1. 添加调试输出定位问题

在每个判断分支中添加调试语句,确认脚本是否走到目标分支:

elif [ -f $FILE3 ]; then
    echo "Debug: Found file $FILE3"
    dias="3 days"
    echo $dias

同时在脚本开头添加路径验证:

echo "Debug: Checking directory $DIRECTORY"
echo "Debug: Target file path $FILE3"

2. 验证文件存在性与权限

在终端中执行以下命令,确认文件存在且有读取权限:

ls -l /home/usuario/Build_WRF/DATA/GFS_72

如果提示权限不足,需调整目录或文件权限,或使用有对应权限的用户运行脚本。

3. 优化脚本逻辑(简化代码,减少出错概率)

用循环替代重复的if-elif,逻辑更清晰且易维护:

#!/bin/bash
DIRECTORY="/home/usuario/Build_WRF/DATA/"
dias=""

# 从10天到1天遍历检查
for days in {10..1}; do
    hours=$((days * 24))
    FILE="${DIRECTORY}GFS_${hours}"
    if [ -f "$FILE" ]; then
        if [ $days -eq 1 ]; then
            dias="1 day"
        else
            dias="${days} days"
        fi
        echo "$dias"
        break
    fi
done

# 未找到文件则退出
if [ -z "$dias" ]; then
    exit 1
fi

FECHAF=$(date +%Y-%m-%d --date="$dias")
FECHAFD=$(date +%d --date="$dias")
FECHAFM=$(date +%m --date="$dias")
FECHAFA=$(date +%Y --date="$dias")

内容的提问来源于stack exchange,提问作者CVB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:31:12