Сравните две даты в оболочке

Я пытаюсь сравнить две даты в сценарии оболочки, но всегда получаю неправильное значение. Это код, который я использую:

currenttime=$(date +%H%M%S);
peak_time=$(date -d "$peak_time" '+%H%M%S');

num1=$(($peak_time-$currenttime))
echo $num1
if [ $num1 < 0 ]
then
  echo "peak time is bigger than current"
else
  echo "peak time is smaller than now"
fi

Я всегда получаю

Пиковое время больше текущего

Даже если оно меньше .

Я попробовал еще раз со статическими числами, например:

    if [ 10 < 0 ]
    then
        echo "peak time is bigger than current"
    else
        echo "peak time is smaller than now"
    fi

Я всегда получаю peak time is bigger than current. Таким образом, оператор if всегда печатает первое предложение.

1
задан 25 April 2019 в 13:55

1 ответ

Вы также должны получить сообщение об ошибке при запуске скрипта:

/home/terdon/scripts/foo.sh: line 7: 0: No such file or directory

Это потому, что вы используете < в [ ], и это не делает арифметическое сравнение, это перенаправление ввода . Таким образом, $num1 < 0 означает «запустить команду $num1 и передать ей содержимое файла 0 в качестве ввода». То, что вы хотите, это [ $num1 -lt 0 ], -lt означает «меньше чем».

Конечно, ваш сценарий не имеет смысла, если вы не устанавливаете peak_time где-либо. Эта строка:

peak_time=$(date -d "$peak_time" '+%H%M%S');

всегда будет печатать 000000, так как при запуске его $peak_time не имеет значения:

$ peak_time=$(date -d "$peak_time" '+%H%M%S');
$ echo $peak_time 
000000

Сначала необходимо установить $peak_time и [ 1119] затем преобразовать его в дату. например:

$ peak_time="10:05:31"
$ peak_time=$(date -d "$peak_time" '+%H%M%S');
$ echo $peak_time 
100531

Итак, рабочая версия вашего скрипта будет:

#!/bin/bash
currenttime=$(date +%H%M%S);
peak_time="10:05:31"
peak_time=$(date -d "+1 hour" '+%H%M%S');

num1=$(($peak_time-$currenttime))
echo $num1
if [ $num1 -lt 0 ]
then
  echo "peak time is bigger than current"
else
  echo "peak time is smaller than now"
fi
0
ответ дан 25 April 2019 в 13:55

Другие вопросы по тегам:

Похожие вопросы: