bash - “while” bash 的问题
问题描述
我需要控制文件夹中的文件......脚本必须等待文件直到它存在......
这些文件的名称... 格式为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" ]
我建议按照以下步骤操作:
- 用双引号保护路径
""
(不是简单的,否则$rundir
不会展开) - 写信
echo "waiting for the file $rundir/file_d01_2018-11-15_20:00:00"
看看你正在测试什么路径 - 此外,用于
-e
查看任何更改(-e
检查路径是否存在,而不仅仅是常规文件)
注意:括号[ ]
调用 fact test
。因此,man test
将为您提供可以使用的运算符及其含义。现在bash
还有双括号[[ ]]
作为内置运算符,功能更强大,可以代替使用。
推荐阅读
- plc - 如何防止梯形图(PLC)中被零除?
- ios - SwiftUI 无法捕获 MapView 的图像
- visual-studio-code - 不断出现错误:“设置已更改,需要重新启动才能生效”
- java - ^= 在 Java for 循环中是什么意思?
- vue.js - VueMapbox 试图创建多个标记
- python - python中字符串firestore之前的几个F&Q 开发一个好的数据库?
- tensorflow - 如何使用手机摄像头实现图像识别
- javascript - ASP.net core MVC 部分视图未卸载 JS
- javascript - 单击按钮 [React] 显示数组中的随机字符串
- python - 循环中迭代文本文件的 Python 函数仅适用于第一个文件