Nowe posty

Autor Wątek: Skrypt nie wchodzi do pętli.  (Przeczytany 2923 razy)

NickOver

  • Gość
Skrypt nie wchodzi do pętli.
« dnia: 2014-11-26, 10:33:17 »
Cześć :)

Mam skrypt:
#!/bin/bash
lock_file='itLives.lock'

if [ -e $lock_file ]
then
modtime=`stat -c %Y itLives.lock`
nowtime=`date +%s`
modtime=$((modtime+0))
nowtime=$((nowtime-900))

if [ $nowtime -gt $modtime ]
then
rm -f $lock_file
else
#         echo $lock_file
       exit 1;
fi
fi

touch $lock_file


all="ALL:ok"
results=""
while read -r line; do
for test in `ls tests`
do
result=`tests/$test $line`
if [ "$result" != "ok" ]
then
all=""

if [ "$results" != "" ]
then
results=$results", "
fi

results=$results$test":"$result
fi
done

result=$all$results

lastResult=`cat lastResult.log 2> /dev/null`


#if [ "$lastResult" != "$result" ]
#then
#for notifications in `ls notifications`
#do
# notifications/$notifications "`date +%H:%M:%S`@`hostname`: $result"
#done


echo $result > lastResult.log
echo "`date` - $result" >> results.log
#fi
done < "pages.txt"
rm -f $lock_file
Jest tam pętla while do której skrypt niestety nie wchodzi, i niestety nie wiem czemu. plik pages.txt znajduje się w tym samym katalogo co ww. skrypt. Jakies pomysły czemu? Dodam  że to pierwsza rzecz napisana przeze mnie w bashu (Nawet hello world nie pisałem :D) więc prosze się nie śmiać :op

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Skrypt nie wchodzi do pętli.
« Odpowiedź #1 dnia: 2014-11-26, 11:23:16 »
Nie testowałem, ale spróbuj wziąć całe while w nawias okrągły:
...
...
( while read -r line; do
  ...
  ...
done ) < pages.txt
...
...
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

NickOver

  • Gość
Skrypt nie wchodzi do pętli.
« Odpowiedź #2 dnia: 2014-11-26, 13:22:47 »
Niestety to nie pomogło.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2769
  • 1709
    • Zobacz profil
Skrypt nie wchodzi do pętli.
« Odpowiedź #3 dnia: 2014-11-26, 14:54:21 »
uruchom skrypt w ten sposob

bash -x ./nazwa_skryptu

- to pokaze nam jak dziala skrypt.
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

ubu59

  • Gość
Skrypt nie wchodzi do pętli.
« Odpowiedź #4 dnia: 2014-11-27, 09:23:23 »
Witam!

Cytat: NickOver
Cześć :)

Mam skrypt:
#!/bin/bash
...
while read -r line; do
...
Jest tam pętla while do której skrypt niestety nie wchodzi, i niestety nie wiem czemu.
Moim zdaniem nie pozwalasz wykonać się pętli stawiając średnik przed do...

Pozdrawiam i życzę sukcesów

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Skrypt nie wchodzi do pętli.
« Odpowiedź #5 dnia: 2014-11-27, 14:39:43 »
Cytat: ubu59
Witam!

Cytat: NickOver
Cześć :)

Mam skrypt:
#!/bin/bash
...
while read -r line; do
...
Jest tam pętla while do której skrypt niestety nie wchodzi, i niestety nie wiem czemu.
Moim zdaniem nie pozwalasz wykonać się pętli stawiając średnik przed do...

Pozdrawiam i życzę sukcesów
Musi być albo średnik przed do albo do w nowej linijce. Tak samo przy do od for i then od if. Albo nowa linijka albo średnik.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

xavery

  • Gość
Skrypt nie wchodzi do pętli.
« Odpowiedź #6 dnia: 2014-12-01, 14:01:25 »
Jeśli pętla nie jest wykonywana a skrypt nie kończy się błędem to jest tylko jedna możliwość - jest wykonywane exit przy padaniu warunku logicznego:

  if [ $nowtime -gt $modtime ]
    then
        rm -f $lock_file
    else
#            echo $lock_file
            exit 1;
czyli, że nowtime jest mniejsze bądź równe modtime. Biorąc po uwagę odjęcie 900 sekund od nowtime być może i tak jest. Druga ewentualność to nie wykonywanie pętli przy zerowym pliku wejściowym pages.txt. Tak jak ktoś tu powiedział: sh -x znacznie pomoże...