Mam poniżej kod w moim skrypcie powłoki, który będzie nadal spał, jeśli nie znajdzie żadnego pliku. I śpi przez pół godziny, ale obecnie nie mam żadnego licznika, jak tylko wykonuję poniższy kod 20 razy, a następnie kończę program, jeśli pliki nadal nie istnieją (czyli nic nie robię po 20 sprawdzeniach i kończę pełny skrypt).Dodawanie licznika w skrypcie powłoki
Jaki jest najlepszy sposób na wykonanie tego problemu? Tak, że jestem również świadomy, patrząc na e-maile, które próbował 20 razy.
Mam nadzieję, że jestem wystarczająco jasny.
while true; do
if /home/hadoop/latest/bin/hadoop fs -ls /apps/hdtech/bds/quality-rt/dt=$DATE_YEST_FORMAT2 then
echo "Files Present" | mailx -s "File Present" -r [email protected] [email protected]
break
else
echo "Sleeping for half an hour" | mailx -s "Time to Sleep Now" -r [email protected] [email protected]
sleep 1800
fi
done
Dzięki sampson za sugestię. Zamiast robić 'break' w' elif' jest jakikolwiek sposób mogę opuścić skrypt? Dlaczego o to pytam, ponieważ po 'done' linii mam dużo więcej kodu do wykonania, więc został on wykonany tylko wtedy, gdy pliki były obecne, ale po dodaniu tej kontroli licznika, nie chcę wykonywać tego kodu również po sprawdzanie 20 razy, czy pliki nadal nie istnieją. – ferhan
@ TechGeeky Aby wyjść z samego skryptu, wykonaj 'exit 0' (jeśli kończysz zgodnie z oczekiwaniami) lub' exit 1' (jeśli kończysz i chcesz wskazać, że wystąpił jakiś błąd) –
Wypróbowałem powyższy kod i otrzymuję wyjątek 'counter = $ ((counter + 1))' ten wiersz jako '$' nieoczekiwany. Dlaczego tak jest? Mam powyższy skrypt jako 'sh -x test1.sh' – ferhan