Как правильно установить эту переменную? - PullRequest
0 голосов
/ 29 мая 2019

Я хочу прочитать отметку времени эпохи из файла, а затем сравнить ее с текущим временем эпохи.

Сравнение не работает, и я получаю ошибку:

./script.sh: строка 13: 1559122886-: синтаксическая ошибка: ожидается операнд (маркер ошибки "-")

#!/bin/bash
RSTL=restart.log
if [ -f $RSTL ]; then
    while IFS='|' read -r NRST LRST
    do
        echo "NRST is: $NRST"
        echo "LRST is: $LRST"
    done <$RSTL
CTIME=$(date +"%s")
echo "CTIME is: $CTIME"
fi
#LRST=$(date +"%s")
DIFF=$(( $CTIME-$LRST ))
echo "DIFF is: $DIFF"
if [[ $DIFF -gt 86400 ]]; then
    echo "1|GREATER"
    echo "1|$CTIME" > $RSTL
elif [[ $LRST -lt 86400 ]]; then
    echo "LESS THAN"
    echo "2|$CTIME" > $RSTL
else
    echo "1|NEW"
    echo "0|$CTIME" > $RSTL
fi
exit

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Когда вы упоминаете необъявленную переменную в $((..)) в форме расширения переменной (например, $var), она раскрывается в пустую строку вместо нуля, таким образом, вы получаете ошибку. Не используйте переменные расширения в арифметических расширениях, если это не нужно. Измените 13-ю строку на следующую, и все готово.

DIFF=$((CTIME-LRST))

Другая проблема с вашим сценарием заключается в том, что вы заполняете NRST и LRST в цикле while, и таким образом они недоступны вне цикла. Чтобы это исправить, замените цикл while на:

IFS='|' read -r NRST LRST <"$RSTL"
echo "NRST is: $NRST"
echo "LRST is: $LRST"

И не забывайте заключать в кавычки все расширения переменных, чтобы избежать разбиения слов.

1 голос
/ 29 мая 2019

В строке 12 удалите «#», а в строке 13 удалите «$» из $ CTIME и $ LRST.

#!/bin/bash
RSTL=restart.log
if [ -f $RSTL ]; then
    while IFS='|' read -r NRST LRST
    do
        echo "NRST is: $NRST"
        echo "LRST is: $LRST"
    done <$RSTL
CTIME=$(date +"%s")
echo "CTIME is: $CTIME"
fi
LRST=$(date +"%s")
DIFF=$(( CTIME-LRST )) # Remove $ from $CTIME and $LRST
echo "DIFF is: $DIFF"
if [[ $DIFF -gt 86400 ]]; then
    echo "1|GREATER"
    echo "1|$CTIME" > $RSTL
elif [[ $LRST -lt 86400 ]]; then
    echo "LESS THAN"
    echo "2|$CTIME" > $RSTL
else
    echo "1|NEW"
    echo "0|$CTIME" > $RSTL
fi
exit
...