Извлеките мой только из файла --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