2014-09-19 4 views
0
typeset -i STARTTIME=`expr $STARTHOUR \* 60 \* 60 + $STARTMINUTE \* 60 + $STARTSECOND` 
echo $STARTTIME 
typeset -i ENDTIME=`expr $ENDHOUR \* 60 \* 60 + $ENDMINUTE \* 60 + $ENDSECOND` 
echo $ENDTIME 

typeset -i ELAPSED=`expr $ENDTIME - $STARTTIME` 
    typeset -i PREVIOUSTIME=`cat previouscompletion${wf}.txt` 

    if [$ELAPSED -ne $PREVIOUSTIME]; then 
    echo $ELAPSED > previouscompletion${wf}.txt 
    fi 

Выше это оператор if, который я пытаюсь запустить в сценарии bash на сервере AIX 6.1.AIX 6.1 Если команда не найдена в сценарии Bash

Что это мне дает, когда я пытаюсь запустить его, хотя, это правильные цифры в эхо, но как только он попадает в, если заявление он хрипит и дает мне

./wf_zabbix_test.sh: line 46: [8: command not found 

Я получил тематические блоки работайте над AIX, но только при сравнении строковых переменных, но я не могу получить ни одно из этих сравнений для работы с целыми числами. К сожалению, в руководствах AIX очень мало информации, и все, что я смог сделать Google, больше ориентируется на использование в других дистрибутивах Linux.

Любая помощь, даже просто ссылка на страницу с описанием как сделать прокрутку if в AIX, была бы весьма признательна.

+1

Вам нужны пробелы вокруг '[' и ']'. 'if [$ ELAPSED -ne $ PREVIOUSTIME]; then' –

ответ

0

[ не является синтаксисом для if, но . ] является (и должен быть) последним параметром (и поэтому после него необходимо ;, если вы положили then на ту же строку - как и вы. Как любая команда, она возвращает значение, а if просто смотрит на это возвращаемое значение, чтобы сделать then (с 0 возвращено) или else (в противном случае).

Кроме того, как какой-либо команды, должно быть по крайней мере одно пространство между командой и первым параметром ($ELAPSED).

О $PREVIOUSTIME], вы конкатенируете символ] после $ PREVIOUSTIME, поэтому команда [ видит только один параметр r вместо 2 ($PREVIOUSTIME и ]).

Просто добавьте пробелы.

if [ $ELAPSED -ne $PREVIOUSTIME ] 
then 
    echo $ELAPSED > previouscompletion$wf.txt 
fi 

Просто чтобы быть ясно, и показать, что является параметром: if [ $ELAPSED -ne $PREVIOUSTIME "]" или if [ $ELAPSED -ne $PREVIOUSTIME ']' будет также синтаксически OK.

+0

Добавление пробелов для меня, а также другие инструкции if в остальной части скрипта. Есть ли хорошее место для дальнейшего изучения различий между синтаксисом и командами? Видя, как я совершенно не подозревал, что скобки были чем-то иным, чем просто содержащим логический тест. Благодаря! – Kyle

+0

Единственная ссылка, которую я могу вам дать, это: http://www.tldp.org/LDP/abs/html/special-chars.html (ее другие страницы тоже очень интересны, и мне нравятся примеры). Я многому научился от этого сам. – syme

+0

@Kyle: попробуйте [Справочное руководство по Bash] (http://www.gnu.org/software/bash/manual/html_node/index.html); он также должен быть доступен, набрав 'info bash'. –

Смежные вопросы