![仅从文件 --mime-type 中提取我的文件以在 bash 脚本中的 if-else 中使用](https://linux22.com/image/934461/%E4%BB%85%E4%BB%8E%E6%96%87%E4%BB%B6%20--mime-type%20%E4%B8%AD%E6%8F%90%E5%8F%96%E6%88%91%E7%9A%84%E6%96%87%E4%BB%B6%E4%BB%A5%E5%9C%A8%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%20if-else%20%E4%B8%AD%E4%BD%BF%E7%94%A8.png)
我发现这个命令给了我一个文件的 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