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)
尝试(假设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使用[[ ... ]].
| 归档时间: |
|
| 查看次数: |
3179 次 |
| 最近记录: |