使用shell脚本检查文件是否为jpeg格式

use*_*064 1 unix linux bash shell sh

我知道我可以file pic.jpg用来获取文件类型,但是如何编写一个if 语句来检查shell脚本呢?

例如(伪代码):

if pic.jpg == jpeg file then
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 8

尝试(假设Bash v3.0 +,使用=~,正则表达式匹配运算符):

if [[ $(file -b 'pic.jpg') =~ JPEG ]]; then ...
Run Code Online (Sandbox Code Playgroud)

如果你想file更紧密地匹配输出:

if [[ $(file -b 'pic.jpg') =~ ^'JPEG ' ]]; then ...
Run Code Online (Sandbox Code Playgroud)

这仅在输出以"JPEG" 开头,后跟空格时才匹配.

或者,如果您更喜欢使用通配样式:

if [[ $(file -b 'pic.jpg') == 'JPEG '* ]]; then ...
Run Code Online (Sandbox Code Playgroud)

符合POSIX的条件([ ... ])提供正则表达式或模式匹配,因此需要采用不同的方法:

if expr "$(file -b 'pic.jpg')" : 'JPEG ' >/dev/null; then ...
Run Code Online (Sandbox Code Playgroud)

注意:expr仅支持基本正则表达式,并隐式锚定在字符串的开头(不需要^).


至于为什么[[ ... ]]而不是[ ... ]在Bash片段中需要:
高级功能,例如正则表达式运算符(=~)或模式匹配(例如,使用不带引号*来表示任何字符序列.)是非标准的(不是POSIX shell规范的一部分).
由于这些功能与标准conditionals()的工作方式不兼容,[ ... ]因此需要新的语法; Bash,Ksh和Zsh使用[[ ... ]].