Вложенный цикл сценария оболочки (в то время как внутри цикла) не работает - PullRequest
0 голосов
/ 16 октября 2019

Мой сценарий оболочки, он правильно выполняет свой внутренний цикл, но только один раз выполняет свой внешний цикл.

Пожалуйста, проверьте мой сценарий, почему он не работает.

ОС: Amazon EC2 Linux

Я создал сценарий оболочки для удаления файлов из каталога с именами файлов, которых нет в моем созданном 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

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Выражение "/home/ec2-user/upload/upload/*" буквально интерпретируется как строка /home/ec2-user/upload/upload/*. Очевидно, вы ожидали, что он будет расширен до массива путей, соответствующих шаблонному выражению. Но в двойных кавычках символ звездочки имеет другое значение - он используется только в расширениях параметров оболочки (чего нет в данном выражении).

Что вы на самом деленужно расширение имени файла . Чтобы активировать его, вам просто нужно поставить символ звездочки за пределы двойных кавычек:

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

Обратите внимание, что вам не нужны двойные кавычки в этой конкретной строке, так как специальных символов нетв нем то, что нужно избежать (цитируется).

0 голосов
/ 16 октября 2019

Во внутреннем цикле есть неуместное «до». Операторы 'if' должны соответствовать этому.

while IFS= read -r line 
do
    if [ "$line" = "$entry" ]
0 голосов
/ 16 октября 2019

Вам нужно удалить кавычки в первой строке

for entry in "/home/ec2-user/upload/upload/*"

должно выглядеть как

for entry in /home/ec2-user/upload/upload/*

для правильной работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...