Извлеките мой только из файла --mime-type для использования в сценарии if-else в bash

Я обнаружил, что эта команда дает мне тип mime из файла:

      file --mime-type dog.jpeg 

Выход:

      dog.jpeg: image/jpeg

Сейчас я пытаюсь создать проверку bash, является ли mime jpeg og png. Однако я немного застрял:

      #!/bin/bash
$file_mime="file --mime-type dog.jpeg"
mime=`"${file_mime#*:}"`

if(mime=='image/jpg' OR mime=='image/png') do:
    echo"Jpg or png"
done

Выход:

      ./bash.sh: line 2: =file --mime-type dog.jpeg: command not found
./bash.sh: line 3: : command not found

2 ответа

Ваша первая ошибка заключается в том, что у вас есть $префикс к вашему заданию. Ваша вторая ошибка связана с тем, что вы пытаетесь совместить выполнение команды с обработкой результатов (удалив имя файла из результата). Как и всегда в сценариях bash, есть много способов добиться одного и того же, поэтому это только один, попробуйте:

      #!/bin/bash

mime=$(file -b --mime-type dog.jpeg)

if [[ $mime = image/@(jpeg|png) ]]; then
    echo "File is a jpeg or png."
fi

Затем оцените $mimeно я предлагаю вам найти и прочитать некоторые учебники по сценариям bash для операторов и т. д. в качестве вашего ifоператор не является допустимым сценарием bash.

Объявление переменных в bash без знака доллара $:

      var="foo"
echo "$var"
foo

Теперь вы хотите выполнить подстановку команд, fileпеременная, являющаяся результатом команды file --mime-type dog.jpeg. Вот как это сделать:

      # now the output of the command is stored in the variable
file_mime=$(file --mime-type dog.jpeg)

Теперь вы можете повторить переменную:

      echo "$file_mime"
dog.jpeg  image/jpeg

и чтобы получить тип mime:

      mime=$(echo "$file_mime" | awk '{ print $2 }')
echo "$mime"
image/jpeg

Другие вопросы по тегам