试图找出如何在不使用多个if语句的情况下处理此条件检查这些文件是否在文件夹中,基本上,如果一个整数是主要的,那么另一个是主要的。因为我使用时间的天小时和分钟值来获得两个整数,一个与当前时间有关,另一个与计划时间有关。
FILE1=180.mp4
FILE2=360.mp4
FILE3=720.mp4
FILE4=1080.mp4
FILE5=audio.mp4
TIME=10155
SCHEDULE=20256
if [ test -f "$FILE1" ] && [ test -f "$FILE2" ] && [ test -f "$FILE3" ] && [ test -f "$FILE4" ] && [ test -f "$FILE5" ] && (( TIME > SCHEDULE )) ; then
echo DO EVENT
else
echo DON'T DO EVENT
fi
[
和test
是同义词。你应该使用其中一个,而不是两者都用。
备选方案1:
if test -f "$FILE1" && test -f "$FILE2" && test -f "$FILE3" && test -f "$FILE4" && test -f "$FILE5" && (( TIME > SCHEDULE ))
then
echo "true"
fi
备选方案2:
if [ -f "$FILE1" ] && [ -f "$FILE2" ] && [ -f "$FILE3" ] && [ -f "$FILE4" ] && [ -f "$FILE5" ] && (( TIME > SCHEDULE ))
then
echo "true"
fi
然而,就像在任何语言中一样,你最好使用数组:
files=(180.mp4 360.mp4 720.mp4 1080.mp4 audio.mp4)
if (( TIME > SCHEDULE ))
then
for file in "${files[@]}"
do
if ! [ -f "$file" ]
then
echo "Missing $file" >&2
exit 1
fi
done
echo "Do the thing"
fi
echo DON'T DO EVENT
可能会出现问题。如果不引用,则该行中有一个不匹配的引用。shell可能会发出unexpected EOF while looking for matching `''
。
这真的应该是一个评论,但我仍在处理代表点,以便能够添加评论