Shell脚本嵌套循环(在for循环内)不起作用

时间:2019-10-16 12:43:36

标签: bash shell sh

我的shell脚本,它可以正确执行其内部循环,但只能执行一次其外部循环。

请检查我的脚本,为什么它不起作用。

OS:Amazon EC2 Linux

我创建了Shell脚本,用于从目录中删除文件名以及文件名, 在我创建的TXT文件中不存在。

for entry in "/home/ec2-user/upload/upload/*"
do
    exist=false

    file="/home/ec2-user/upload/requiredjpg.txt"
    while IFS= read -r line
    do
        if [ "$line" = "$entry" ]
        then
            echo "same"
        else
            echo "not same"
        fi
    done <"$file"

    echo $exist
    if [ $exist = false ]
    then
        echo $exist
    fi
done

2 个答案:

答案 0 :(得分:1)

表达式"/home/ec2-user/upload/upload/*"从字面上解释为字符串/home/ec2-user/upload/upload/*。显然,您希望将其扩展为与通配符表达式匹配的路径数组。但是,在双引号中,星号字符具有不同的含义,即仅在shell parameter expansions中使用(在相关表达式中不存在。)

您真正需要的是filename expansion。为了激活它,您只需要将星号字符放在双引号之外:

"/home/ec2-user/upload/upload/"*

请注意,在此特定字符串中不需要双引号,因为其中没有任何特殊字符需要转义(引号)。

答案 1 :(得分:0)

内循环中放错了“ do”。 “ if”语句应位于其下方。

while IFS= read -r line 
do
    if [ "$line" = "$entry" ]