LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 913|回复: 4

大家好,请教一个有关于find 的回传值问题。echo $?

[复制链接]
发表于 2010-4-24 12:57:24 | 显示全部楼层 |阅读模式
#第一个命令,文件abc是存在的。
task:~$find . -name abc
./abc
task:~$echo $?
0
#第二个命令,文件dasdasdasdsadasd,是不存在的,我随便乱输入的
task:~$find . -name dasdasdasdsadasd
task:~$echo $?
0

我就是想问下,find是不是不管有没有找到文件,回传值都是0啊??
有没有办法让他在着不到文件的时候,echo $?的值为 1 呢?

比如说,我想执行这么一条命令,用来转换MP3得ID3信息的:
find ~/music/* -iname $mp3name -execdir mid3iconv -e gbk --remove -v1 {} \; && echo '转换成功 || echo '转换失败,请确认文件是否存在'
$mp3name 这个变量我已经设置好,没问题了。
现在就是,不管文件存在不存在,都显示的是 ‘转换成功’,有没有办法解决呢?
发表于 2010-4-24 13:13:29 | 显示全部楼层
  1. [ -n "`find ~/music/* -iname $mp3name -execdir mid3iconv -e gbk --remove -v1 {} \;`" ]\
  2.      && echo '转换成功'\
  3.      || echo '转换失败,请确认文件是否存在'
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-24 14:02:13 | 显示全部楼层
谢谢jockey兄提供的答案。^^
能否顺便解释下吗?我对-n 和[  ]这两个部分的意义不太明白
回复 支持 反对

使用道具 举报

发表于 2010-4-24 14:19:22 | 显示全部楼层
[]等同于test

-n 参见:man bash 搜索CONDITIONAL EXPRESSIONS
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-24 16:59:43 | 显示全部楼层
-n string
              True if the length of string is non-zero.

task:~$find ~/music/* -iname 爱错.mp3 -execdir mid3iconv -e gbk --remove -v1 {} \;
Updating ./爱错.mp3
task:~$find ~/music/* -iname dasdasdasd.mp3 -execdir mid3iconv -e gbk --remove -v1 {} \;
task:~$
用-n,“”里的命令执行完毕后,有Updating ./爱错.mp3字串出现,所以符合-n true的条件,它的$?=0,所以执行&&后面的东西。
而如果没有执行成功,find的输出结果是空空的,不符合-n的条件,它的$? 不等于0了,所以执行||后面的东西。

这样理解没错吧,U571兄
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表