我很难为if语句在ShellScript中不起作用

时间:2018-02-22 04:45:07

标签: shell for-loop search directory

我很难想知道为什么当我输入最随机的名字时,它们会被接受为目录。当一个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

1 个答案:

答案 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}"之后完成,或包含完整路径。