2013-02-19 4 views
0

Я довольно новичок в создании сценариев bash, но мне удалось написать скрипт, который работает почти отлично, и я действительно горжусь собой. Тем не менее, у меня есть эта проблема, и я не понимаю, почему это не сработает. Часть моего текущего кода заключается в следующем:bash script if statement error

for begin in 1 51 
do 
    echo -e "$begin" 
    url="http://something&start-index=$begin&something" 

    wget -O $HOME/Music/YoutubePlaylist/output$begin.txt $url 2>&1 

    cat output1.txt > output.txt 

    if ! [[ "$begin" = 1 ]] 
     then 
     cat output$begin.txt >> output.txt 
    fi 

done 

Он отлично работает.

Однако, если я добавлю 101 в первую строку, это не сработает. Любая идея почему? То, что он на самом деле делает, когда я смотрю на свои временные файлы, записывает только то, что находится в output1.txt в output.txt, и ничего больше.

PS: output1.txt и output51.txt не пусты, а output101.txt пуст. Может быть, То будет намек ....

+1

пожалуйста, добавьте «установить -x» в сценарии оболочки перед для заявления. Это способ отладки Shell Script – user1428716

+0

Пробовал ли вы 'wget'ting URL-адрес вручную для вашего« 101 »случая? – Anew

ответ

0

Такой вариант должен работать все в порядке:

for begin in 1 51 101 
do 
echo -e "$begin" 
... 
done 

проверил ли вы, если wget -O $HOME/Music/YoutubePlaylist/output$begin.txt $url 2>&1 существует? Не могли бы вы выполнить это из командной строки и проверить результат? , например.

$wget -O $HOME/Music/YoutubePlaylist/output101.txt $url 2>&1 

С уважением

1

cat output1.txt > output.txt является перезапись output.txt для каждого круга.

ли это вместо (только исправление проблемы с output.txt):

rm -f output.txt # if it should start with an empty file 

for begin in 1 51 
do 
    echo -e "$begin" 
    url="http://something&start-index=$begin&something" 

    wget -O $HOME/Music/YoutubePlaylist/output$begin.txt $url 2>&1 

    cat output$begin.txt >> output.txt 
done