declare -i fil="$1"
declare -t tid="$2"
notFinished=true
finnes=false
if [ -f $fil ];
then
finnes = true
fi
while $notFinished;
do
if [ -f $fil && ! $finnes ]; (14)
then
echo "Filen: $fil ble opprettet."
finished=true
fi
if [ ! -f $fil && $finnes ]; (20)
then
echo "Filen: $fil ble slettet."
finished=true
fi
sleep $tid
done
我正在尝试检查名称为$ fil的文件是否在脚本生命周期内创建或删除,只检查每个$ tid秒。我还想通过比较时间戳来检查文件是否被更改,但我不确定如何做到这一点..只是想提一下,这是第一次尝试用这种语言编程。
我现在唯一的错误是:
/home/user/bin/filkontroll.sh: line 14: [: missing `] '
/home/user/bin/filkontroll.sh: line 20: [: missing `] '
@edit:修复了notFinished和一些间距
答案 0 :(得分:1)
您可以使用以下内容:
#!/bin/bash
declare -i fil="$1"
declare -t tid="$2"
notFinished=true
finnes=false
if [ -f "$fil" ]; then
finnes=true
fi
while [ "$notFinished" = true ];
do
if [ -f "$fil" ] && [ ! "$finnes" = true ]; then
echo "Filen: $fil ble opprettet."
finished=true
fi
if [ ! -f "$fil" ] && [ "$finnes" = true ]; then
echo "Filen: $fil ble slettet."
finished=true
fi
sleep $tid
done
请注意,您应该阅读How to declare and use boolean variables in shell script?有趣的问题和答案(链接到我更喜欢的答案),这样您就可以看到布尔检查应该这样做(这适用于if
但也适用于while
到if [ "$bool" = true ]; then
):
{{1}}
另外,请注意我引用了变量。这是一个很好的做法,可以避免在未设置变量时有时会出现奇怪的行为。
答案 1 :(得分:0)
me@box:/tmp $ if [ a ] ; then echo foo; fi
foo
me@box:/tmp $ if [ b ] ; then echo foo; fi
foo
me@box:/tmp $ if [ a && b ] ; then echo foo; fi
bash: [: missing `]'
me@box:/tmp $ if [ a ] && [ b ] ; then echo foo; fi
foo
me@box:/tmp $ if [[ a && b ]] ; then echo foo; fi
foo