Проблем с shell-скриптом пока нет! - PullRequest
2 голосов
/ 22 июня 2010

Прежде всего, я новичок в shell-скрипте.Этот код, который я сделал, не работает.

Я хочу повторить код в течение 30 секунд, но он не работает.Это просто продолжает мою логику до бесконечности.

DIFF=0

while [ $DIFF < 30 ]; do

    START=$(date +%s)

######## My logic #########

    DIFF=$(( $END - $START ))
    echo $DIFF
    cd ..
    sleep 5s

done

Я думаю, это потому, что я не правильно делаю предложение while?

Ответы [ 4 ]

2 голосов
/ 22 июня 2010
((end = $(date +%s) + 30))
while (( $(date +%s) < end ))
do
    something
done

Или, используя встроенную переменную $SECONDS в Bash:

((end = SECONDS + 30))
while (( SECONDS < end ))
do
    something
done
2 голосов
/ 22 июня 2010

Ну, вам определенно необходимо предоставить некоторые значения для $START и $END. Они не будут устанавливать себя!

Вы можете сделать что-то вроде

START = `date +%s` 

чтобы установить время в секундах. Конечно, END нужно будет установить внутри цикла, чтобы обновить его.

EDIT: cd .., надеюсь, не совсем то, что вы планируете запустить внутри цикла. В течение нескольких миллисекунд ваш текущий каталог будет корневым каталогом, и мало что еще будет выполнено. Было бы дешевле сделать один cd /.


РЕДАКТИРОВАТЬ 2: Это не должно быть такой сложной проблемой. Для этого редактирования я создал и протестировал однострочное решение:

START=$(date +%s); DIFF=0; while [ $DIFF -lt 30 ]; do echo $DIFF; DIFF=$(($(date +%s)-$START)); done

Это корректно обновит свои переменные и отобразит их ... и закончится через 30 секунд.

1 голос
/ 22 июня 2010

использовать бесконечный цикл. пример псевдокода

DIFF=0
while true
do
  START=$(date +%s)
  END=.... #define your end
  DIFF=$((END-START))
  if [ "$DIFF" -gt 30 ] ;then
    break
  fi
  .....
done
1 голос
/ 22 июня 2010

Похоже, вы используете bash.

Попробуйте что-то вроде этого, возможно:

START=...
while (($DIFF<30)); do
   #   ....
   DIFF=$((END-START))
done

(См. Оценка арифметики Баша и Конструкция с двойными скобками .)

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