我很难想知道为什么当我输入最随机的名字时,它们会被接受为目录。当一个if语句检查它是否是一个可读文件时,它对所有我输入的内容都是肯定的。这里的目标是搜索目录检查它是否是一个目录。然后在目录中搜索文件,然后在该文件中使用forloops搜索其中的单词。 while循环是要求3次输入文件名。它有点粗糙我只需要解释if语句不起作用
#!/bin/sh
DIR='/home/collin2/'
x=1
echo "Please enter directory"
read directory
for directory in "$DIR";
do
if [ -d "$directory" ];
then echo "This is a directory Please enter the file name"
read filename
while [ $x -le 3 ]; do
for filename in "$directory";
do
if [ -r "$filename" ]
then echo "The filename is readable"
echo "Please Enter a word "
read word
grep "$word" "$filename"
exit 1
fi
done
echo "Doesn't exist please try again"
read filename
x=`expr $x + 1`
done
#exit 1
fi
done
echo "not a directory"
退出0
答案 0 :(得分:0)
您的for
命令错误:
如果你写for directory in "$DIR";
,它会将变量directory
的值设置为"$DIR"
。您想检查一下,您可以在directory
中找到"$DIR"
,这可以在没有for
命令的情况下完成:
cd "$DIR" || { echo "Can not go to $DIR"; exit 1; }
test -d "${directory}" || { echo "Wrong directory ${directory}"; exit 1; }
# or
test -d "$DIR/${directory}" || { echo "Can not go to $DIR"; exit 1; }
与其他for循环相同的问题。
测试if [ -r "$filename" ]
应在cd "$DIR/${directory}"
之后完成,或包含完整路径。