仅从文件 --mime-type 中提取我的文件以在 bash 脚本中的 if-else 中使用

仅从文件 --mime-type 中提取我的文件以在 bash 脚本中的 if-else 中使用

我发现这个命令给了我一个文件的 MIME 类型:

file --mime-type dog.jpeg 

输出:

dog.jpeg: image/jpeg

我现在尝试创建一个 bash 检查 mime 是否是 jpeg 或 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

答案1

第一个错误是因为您$的任务带有前缀。第二个错误是因为您尝试将命令的执行与结果的处理结合起来(从结果中剥离文件名)。与 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语句等,因为您的if语句不是有效的 bash 脚本。

答案2

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

相关内容