2017-02-17 28 views
1

Я пишу простой скрипт bash для чтения имен файлов из текстового файла и проверки, существуют ли они в каталоге. Хотя это прекрасно работает, после того как все файлы проанализированы, я застреваю в бесконечном цикле.Bash script бесконечный цикл во время чтения файла

#!/bin/bash 
if [ "$1" = "" ]; then 
     echo "No input file to parse given. Give me an input file and make sure the corresponding .gz files are in the folder." 
else 
     file=$1 
     echo "Loaded $file." 
     while read -r line 
     currentfile="$line.gz" 
     do 
       if [ -f $currentfile ]; then 
         echo "The file '$currentfile' exists." 
       else 
         echo "The file '$currentfile' does not exist." 
       fi 
     done < "$file" 
fi 

И это зацикленной выход после того, как все файлы перечислены:

The file '.gz' does not exist. 
The file '.gz' does not exist. 
The file '.gz' does not exist. 
The file '.gz' does not exist. 
The file '.gz' does not exist. 
The file '.gz' does not exist. 
etc. 

Я знаю, что решение должно быть очень простым, но это было подслушивание меня большую часть утра! Любая помощь ценится!

ответ

1

Назначение

currentfile="$line.gz" 

не принадлежит между read и do, не так ли? Это делает условие всегда истинным.

Переместить его после do.

+0

Большое обязательство, добрый сэр! – ScubaChris

+0

@ScubaChris: Просто подтвердите/примите ответ :) – choroba