Linux 意外标记“if';
我目前正在尝试编写一个bash脚本,它可以帮助我逐步浏览目录并检查文件的.jpeg或.jpg扩展名。我得出以下结论:Linux 意外标记“if';,linux,bash,ubuntu,if-statement,scripting,Linux,Bash,Ubuntu,If Statement,Scripting,我目前正在尝试编写一个bash脚本,它可以帮助我逐步浏览目录并检查文件的.jpeg或.jpg扩展名。我得出以下结论: #declare $PICPATH, etc... for file in $PICPATH if [ ${file -5} == ".jpeg" -o ${file -4} == ".jpg" ]; then #do some exif related stuff here. else #throw some error
#declare $PICPATH, etc...
for file in $PICPATH
if [ ${file -5} == ".jpeg" -o ${file -4} == ".jpg" ];
then
#do some exif related stuff here.
else
#throw some errors
fi
done
执行时,bash在if行上不断抛出一个错误:“意外标记'if'附近的语法错误”
我是一个全新的脚本编写者;我的if语句有什么问题
谢谢。我想你只是错过了
for
循环的do子句:
#declare $PICPATH, etc...
for file in $PICPATH; do
if [ ${file -5} == ".jpeg" -o ${file -4} == ".jpg" ];
then
#do some exif related stuff here.
else
#throw some errors
fi
done
是语法错误。也许你是说
${file#*.}
?
无论如何,最好是:
for file in $PICPATH; do
image_type="$(file -i "$file" | awk '{print gensub(";", "", $2)}')"
case $image_type in
image/jpeg)
# do something with jpg "$file"
;;
image/png)
# do something with png "$file"
;;
*)
echo >&2 "not implemented $image_type type "
exit 1
;;
esac
done
如果您只想处理jpg
文件,请执行以下操作:
for file in $PICPATH; do
image_type="$(file -i "$file" | awk '{print gensub(";", "", $2)}')"
if [[ $image_type == image/jpeg ]]; then
# do something with jpg "$file"
fi
done
我不敢相信我错过了。我花了一个小时试图找出哪里出了问题。非常感谢。如果你喜欢,你可以把
do
放在新行上。然后,你可以省略它前面的分号;
。同样的情况也适用于然后之后的如果。非常感谢改进的版本,但我只需要case for jpeg:所有其他内容都应该忽略。非常感谢您的回复。请参阅我编辑的文章。这里的感谢方式是对回复进行投票。您可以通过单击复选标记来接受它。这就是StackExchange问答网站的工作方式。要删除变量的最后5个字符,请使用${file::-5}
,您正在做的${file-5}
将无法工作。
for file in $PICPATH; do
image_type="$(file -i "$file" | awk '{print gensub(";", "", $2)}')"
if [[ $image_type == image/jpeg ]]; then
# do something with jpg "$file"
fi
done