我的脚本有问题。
这就是代码
#!/bin/bash
date=`date +"%m-%d-%y"`
dokuwiki="dokuwiki.$date*.toolbox.admin.tar.gz"
if test -e $dokuwiki
then
echo "works"
else
echo "shits broken yo"
fi
我的问题,我认为它找不到奇怪的文件
文件是这样的:
dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz
干杯
答案1
引号阻止 * 执行 glob 来匹配文件。如果只有一个文件需要修补,则只需删除引号即可;否则你必须修改脚本来处理扩展中的多个文件名,例如
for filename in $dokuwiki; do
# do something with $filename
done
答案2
问题是星号 ( *
) 扩展是由 bash 完成的。
带有一个 doku* 文件
mybox $ touch dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz
mybox $ date=`date +"%m-%d-%y"`
mybox $ echo $date
09-12-14
mybox $ dokuwiki="dokuwiki.$date*.toolbox.admin.tar.gz"
mybox $ echo $dokuwiki
dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz
mybox $ test -e $dokuwiki ; echo $?
0
有两个 docu* 文件
mybox $ touch dokuwiki.09-12-14-05-00.toolbox.admin.tar.gz
mybox $ test -e $dokuwiki ; echo $?
-bash: test: dokuwiki.09-12-14-06-00.toolbox.admin.tar.gz: binary operator expected
2
该行test -e doku*
扩展为test -e doku-1 doku2
.
你可能希望使用
if ls $dokuwiki > /dev/null 2>&1
then
...
作为测试部分。
答案3
如果你像这样使用 if 中的存在
if [ -e $docuwiki ]
then
echo "works"
else
echo "broken"
fi
会起作用的。如下所述,if 语句是等效的。从问题中重新复制后,我认为这实际上是变量 docuwiki 的问题,因为我无法正确回显,手动重写它有帮助。