我必须编写一个shell脚本来监视命令中给出的一些文件夹,并在其中创建某个文件时给出一条消息(文件名将从键盘中读取)。
有谁能告诉我为什么这不起作用?
#!/bin/sh
f=`read filename`
isIn=0
for dir in $*
do
if [ ! -d $dir ]
then
echo $dir is not a directory.
fi
for i in `find $dir -type f`
do
if [ $f=$i ]
then
echo The file $f already exists.
isIn=1
break
fi
done
if [ $isIn -eq 0 ]
then
sleep 20
isIn=0
for i in `find $dir -type f`
do
if [ $f=$i ]
then
echo The file was created\!
isIn=1
break
fi
done
fi
if [ $isIn -eq 0 ]
then
echo The file was not created\!
fi
done
我使用的想法是我从目录中获取所有文件并验证文件是否已经存在。 如果是 - 显示消息并移动到下一个目录。 如果没有,那么我等着#39;如果在我等待创建某个文件的时候,它会出现在所有文件的列表中,我会检查它。
我的问题是无论我从键盘上读取什么文件,我都会得到消息"该文件已经存在。"没有告诉我文件的名称。
答案 0 :(得分:0)
f=`read filename`
替换为正确的使用read f
或read -p filename: f
。 find $dir -type f
打印完整的文件名,包括目录路径。由于您只需要基本名称,因此请替换两行
for i in `find $dir -type f`
与
for i in `find $dir -type f -printf '%f\n'`
[
]
中的每个运算符和操作数必须是单独的参数。因此,替换两行
if [ $f=$i ]
与
if [ "$f" = $i ]