Множественный -a со скриптом bash больше / меньше чем break - PullRequest
4 голосов
/ 09 января 2012

Я написал скрипт bash, который выполняет вызов curl только в рабочее время.По какой-то причине почасовое сравнение завершается неудачно, когда я добавляю оператор "-a" (и по какой-то причине мой bash не распознает "&&").

Хотя сценарий намного больше, вот соответствующий фрагмент:

HOUR=`date +%k`

if [ $HOUR > 7 -a $HOUR < 17 ];
then
  //do sync
fi

Скрипт выдает мне ошибку:

./tracksync: (last line): Cannot open (line number): No such file

Однако это сравнение не дает сбой:

if [ $DAY != "SUNDAY" -a $HOUR > 7 ];
then
  //do sync
fi

Мой синтаксис неверен или этопроблема с моим bash?

Ответы [ 4 ]

13 голосов
/ 09 января 2012

Вы не можете использовать < и > в скриптах bash как таковых. Для этого используйте -lt и -gt:

if [ $HOUR -gt 7 -a $HOUR -lt 17 ]

< и > используются оболочкой для перенаправления стандартного ввода или стандартного вывода.

Сравнение, которое вы говорите, работает на самом деле создает файл с именем 7 в текущем каталоге.

Что касается &&, это также имеет особое значение для оболочки и используется для создания «списка И» команд.

Лучшая документация для всего этого: man bashman test для подробностей об операторах сравнения)

6 голосов
/ 09 января 2012

Здесь есть несколько ответов, но ни один из них не рекомендует фактический числовой контекст.

Вот как это сделать в bash:

if (( hour > 7 && hour < 17 )); then
   ...
fi

Обратите внимание, что "$" не требуетсярасширить переменные в числовом контексте.

0 голосов
/ 09 января 2012

Попробуйте использовать [[ вместо этого, потому что это безопаснее и имеет больше возможностей.Также используйте -gt и -lt для числового сравнения.

if [[ $HOUR -gt 7 && $HOUR -lt 17 ]]
then
    # do something
fi 
0 голосов
/ 09 января 2012

Я предлагаю вам использовать кавычки вокруг ссылок на переменные и «стандартных» операторов:

if [ "$HOUR" -gt 7 -a "$HOUR" -lt 17 ]; ...; fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...