bash - "while"bash 的问题

标签 bash while-loop

我需要控制文件夹中的文件...脚本必须等待文件直到它存在...

这些文件的名称...格式为 file_d01_YYYY-MM-DD_HH:00:00。例如:

file_d01_2018-11-12_00:00:00
file_d01_2018-11-12_01:00:00

以此类推,提前 7 天。

!/bin/bash


ZZ=`date +%k`
date=$(date +%Y%m%d)
if [[ $ZZ -ge 2 ]] && [[ $ZZ -lt 14 ]] ; then  #03:45 UTC
ZZ=00
PARAM=`date +%Y%m%d`$ZZ
PARAM2=`date +%Y-%m-%d`
elif [[ $ZZ -ge 14 ]] && [[ $ZZ -lt 23 ]] ; then #15:45 UTC
ZZ=12
PARAM=`date +%Y%m%d`$ZZ
PARAM2=`date +%Y-%m-%d`
fi


rundir=/home/$PARAM/wrfv3
dir=/home/$PARAM

data=$(date +%Y-%m-%d)
data1=$(date -d "1 day" +%Y-%m-%d)
data2=$(date -d "2 day" +%Y-%m-%d)
data3=$(date -d "3 day" +%Y-%m-%d)
data4=$(date -d "4 day" +%Y-%m-%d)
data5=$(date -d "5 day" +%Y-%m-%d)
data6=$(date -d "6 day" +%Y-%m-%d)




days=( "$data" "$data1" "$data2" "$data3" "$data4" "$data5" "$data6" )   #array of days
values=( {00..23} ) #array of 24 hours
echo ${#values[@]}

# Here, using to loops, I check if files exist...for every day and hour
for day in "${days[@]}"; do
for value in "${values[@]}"; do
echo file_d01_${day}_${value}:00:00

while [ ! -f $rundir/file_d01_2018-11-15_20:00:00  ] # while file doesn't exist...wait...and repeat checking till it exists...
do
echo "waiting for the file"
sleep 10
done
echo "file exists"
sleep 5

done
done

我总是收到“等待文件”...它们存在...代码中的问题在哪里?

最佳答案

您应该添加双引号 "" 以保护路径。这是一个很好的做法。 bash 扩展还转义了 : 字符,所以这可能是您的上下文中的一个问题(不是我测试的那个)。

while [ ! -e "$rundir/file_d01_2018-11-15_20:00:00" ]

我建议遵循这些步骤:

  1. 引号""保护路径(不是简单的,否则$rundir不会展开)
  2. 写入 echo "waiting for the file $rundir/file_d01_2018-11-15_20:00:00" 以查看您正在测试的路径
  3. 此外,使用 -e 查看任何更改(-e 检查路径是否存在,而不仅仅是常规文件)

注意:括号 [ ] 实际上调用了 test。因此,man test 将为您提供可以使用的运算符及其含义。而且现在bash有双括号[[ ]]作为内置运算符,功能更强大,可以代替。

关于bash - "while"bash 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53270347/

相关文章:

linux - 如何从 Bash 中的数组中获取唯一值?

java - while 循环中未读取 boolean 标志(java)

C While 循环不起作用

java - 如何重写空的while block

bash - 如何阻止 virtualenv 更改我的 PATH 顺序

linux - 如何在 Linux 中限制用户命令

python - 将变量从 Python 传递到 Bash

php - 背靠背准备好的语句中的第二个准备好的语句存在问题

oracle - 控制while循环中的空数据集情况(Oracle PLSQL)

python - 从 bash 向 python 发送参数