내 스크립트에 문제가 있습니다.
이것은 코드입니다
#!/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 [ -e $docuwiki ]
then
echo "works"
else
echo "broken"
fi
작동합니다. 아래에 설명된 대로 if 문은 동일합니다. 질문을 다시 복사한 후에는 이것이 실제로 변수 docuwiki에 문제가 있다고 생각합니다. 올바르게 에코할 수 없고 수동으로 다시 작성하는 것이 도움이 되기 때문입니다.