Bash оператор if с AND - PullRequest
       3

Bash оператор if с AND

0 голосов
/ 03 августа 2020

Попытка выяснить, как заставить работать это условие, без использования нескольких операторов if. Проверьте, находятся ли эти файлы в папке, и в основном, если целое число больше, чем другое, так как я использую для concat дней часов и минут значение времени чтобы получить два целых числа, одно с текущим временем, а другое с расписанием.

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

Ответы [ 3 ]

2 голосов
/ 03 августа 2020

[ и 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
1 голос
/ 03 августа 2020

Возможно, у вас возникнут проблемы с echo DON'T DO EVENT. без кавычек у вас есть одинарная кавычка, не имеющая себе равных в этой строке. Оболочка, скорее всего, выдаст unexpected EOF while looking for matching `''.

Это действительно должен быть комментарий, но я все еще работаю над точками репутации, чтобы иметь возможность добавлять комментарии

1 голос
/ 03 августа 2020
FILE1=180.mp4
FILE2=360.mp4
FILE3=720.mp4
FILE4=1080.mp4
FILE5=audio.mp4

TIME=10155
SCHEDULE=20256

if [ ( test -f "$FILE1" ) -a ( test -f "$FILE2" ) -a  ( test -f "$FILE3" ) -a ( test -f "$FILE4" ) -a ( test -f "$FILE5" ) -a ( TIME > SCHEDULE ) ]  
then 
    echo DO EVENT
else
    echo DON'T DO EVENT
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...