script checking file exists
我正在尝试制作脚本,该脚本将检查文件是否存在。文件名由参数传递。脚本正在检查当前目录中是否存在文件。
1 2 3 4 5 6 7 8 9 10
| #!/bin/bash
tmp=$(find $1)
failure="find: ‘$1‘: No such file or directory"
if ["$tmp" !="$failure" ]; then
echo"file exists"
else
echo"file not exists"
fi |
我正在创建两个变量。第一个保存find命令的结果,第二个保存find命令的失败消息。在if语句中,我比较了这些变量。
即使文件存在,我也总是收到else语句消息。这个代码有什么问题?
- EDOCX1?0?
- Cult Cargo编程已发现
- 感谢您阅读文档:faq:mywiki.wooledge.org/bash faq guide:mywiki.wooledge.org/bash guide ref:gnu.org/s/bash/manual wiki.bash-hacker.org mywiki.wooledge.org/quotes检查您的脚本:shellcheck.net并避免人们建议使用tldp.org网站学习,tldp bash guide已过时,在某些情况下只是简单的wroNG。
- @吉列斯奎诺,我没听说过这个词。太棒了,我会用的。-D
- 不客气@ghoti,很高兴
如果您的文件在当前路径中,则无需使用find,下面的内容可能会对您有所帮助。
1 2 3 4 5 6 7
| #!/bin/bash
filename=$1
if [[ -f"$filename" ]]; then
echo"file exists"
else
echo"file does not exists"
fi |
然后以script.ksh file_name的形式运行脚本,如果您需要验证文件是否存在并且有一定的大小,那么在上述代码中将-f更改为-s。
您也可以使用man test检查您的框中的所有这些条件。
- 那么,如果语句有自己的"命令"?
- @伊曼尼普,就像你可以说的支票,更多细节见man test。
- help [[无需在[[ ]]内报价
- @投反对票的人,为什么投反对票?我从来没有得到低级别选民的答复:(
- @Gillesquent引用在[[ ]]中有时是不必要的,但有时是需要的。例如,在[[ $a = $b ]]中,无论引用与否,$a的值都将被视为文本字符串,但除非引用,否则$b的值将被视为全局模式。在我看来,将所有变量的扩展重复引用要比跟踪哪些地方可以安全地去掉引用容易得多。