【问题标题】:bash script can't check file existsbash 脚本无法检查文件是否存在
【发布时间】:2023-01-20 02:11:57
【问题描述】:

大家好:我有一个 bash 脚本,用于检查文件是否存在,并根据该信息创建一个新文件。有问题的脚本部分是这个..

#!/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")

文件存在,例如今天我有文件 GFS_72,脚本应该返回 3 天,但什么也没有返回。 我错过了什么。 干杯。

【问题讨论】:

标签: linux bash


【解决方案1】:

当使用 [...] 时,您应该始终引用参数以防止空间分割。

if [ -f "$FILE10" ]; then
        dias="10 days"
        echo "$dias"
elif ...

如果你知道这将在 Bash 中运行,你应该使用 [[...]] 代替,你不必使用引号(= 的 RHS 除外)。

在大多数情况下,[[...]] 也比[...] 稍微快一点,并且它具有更多功能,例如 glob 比较、正则表达式等。

if [[ -f $FILE10 ]]; then
        dias="10 days"
        echo "$dias"
elif ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2018-06-12
    • 2014-04-13
    • 2015-07-07
    • 2010-10-10
    • 2011-09-22
    相关资源
    最近更新 更多