使用AND对if语句进行Bash处理



试图找出如何在不使用多个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 `''

这真的应该是一个评论,但我仍在处理代表点,以便能够添加评论

最新更新