我正在尝试创建一个shell程序,它告诉我何时创建了文件,何时修改了文件以及何时删除了该文件。我想我可以解决这个问题,但我唯一的问题是我无法比较统计值。它告诉我,我有“太多的论点”。任何帮助将不胜感激:))
#!/bin/bash
run=yes
if [ -f $1 ]
then
while [ run=yes ]
do
time1=$(stat -c %y $1)
time2=$(stat -c %y $1)
if [ ! $time2 ]
then
echo "The file "$1" has been deleted."
run=no
elif [ $time2 -gt $time1 ]
then
echo "The file "$1" has been modified."
run=no
fi
done
else
while [ run=yes ]
do
sleep 2
if [ -f $1 ]
then
echo "The file "$1" has been created."
run=no
fi
done
fi
答案 0 :(得分:0)
static -c %y ...
的输出包括空格,这是shell用来分隔参数的内容。然后运行:
if [ ! $time2 ]; then
这转化为:
if [ ! 2017-09-02 08:57:19.449051182 -0400 ]; then
哪个错误。 !
运算符只需要一个参数。你可以用引号解决它:
if [ ! "$time2" ]; then
或者使用特定于bash的[[...]]]
条件:
if [[ ! $time2 ]]; then
(有关第二个解决方案的详细信息,请参阅bash(1)
手册页。)
另外,您无法将时间与-gt
进行比较,如下所示:
elif [ $time2 -gt $time1 ]
这个(a)与早期的if
语句有同样的问题,而(b)-gt
只能用来比较整数,而不是时间字符串。
如果您使用%Y
代替%y
,您将获得自纪元以来整数秒的时间,这将解决所有上述问题。
答案 1 :(得分:0)
代码现在正在运行,我想如果有人想知道我会分享最终结果。
#!/bin/bash
run=true
if [ -f $1 ]
then
while [ "$run" = true ]
do
time1=$(stat -c %Y $1 2>/dev/null)
sleep $2
time2=$(stat -c %Y $1 2>/dev/null)
if [ ! "$time2" ]
then
echo "The file "$1" has been deleted."
run=false
elif [ $time2 -gt $time1 ]
then
echo "The file "$1" has been modified."
run=false
fi
else
while [ "$run" = true ]
do
sleep 2
if [ -f $1 ]
then
echo "The file "$1" has been created."
run=false
fi
done
fi