LINUX.ORG.RU

Ошибка при работе скрипта в if & else & fi

 , ,


1

0

Всем привет. Есть кусок скрипта:

DBDATE=`date +%d%m%Y`
DATE=`date +%d"/"%m"/"%y" "%H":"%M":"%S:%N`
	echo $DATE "gzip: JOB START" >> db_backup.log

	gzip backup$DBDATE.sql
	STATUS=$?

DATE=`date +%d"/"%m"/"%y" "%H":"%M":"%S:%N`
if $STATUS -eq 0
	then
		echo $DATE "gzip: JOB DONE" >> db_backup.log
	else
		echo $DATE "gzip: JOB FAILED! Status: " $STATUS ";" >> db_backup.log
fi

При выполнении его выдает ошибку в строке где начинается оператор if 0: command not found. И в лог пишет echo которое в else, то есть JOB FALED STATUS = 0. Но ведь 0 это успешное завершение работы команды. Почему вот такая ошибка и как её исправить?


if «${STATUS}» -eq «0»

anonymous
()
Ответ на: комментарий от demo

сам первое время на этом рвался, так что не переживай

blokant ★★
()
Ответ на: комментарий от demo

hint: всё в bash - это команда. if - это команда. [ - это команда (аналогичная команде test). Следовательно, параметры от команды [ нужно отделять пробелами.

Кстати, это означает, что в bash можно мгновенно получить справку по любой встроенной команде:

$ help [
[: [ arg... ]
    Evaluate conditional expression.
    
    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.
[[ ... ]]: [[ expression ]]
    Execute conditional command.
    
    Returns a status of 0 or 1 depending on the evaluation of the conditional
    expression EXPRESSION.  Expressions are composed of the same primaries used
    by the `test' builtin, and may be combined using the following operators:
    
      ( EXPRESSION )    Returns the value of EXPRESSION
      ! EXPRESSION              True if EXPRESSION is false; else false
      EXPR1 && EXPR2    True if both EXPR1 and EXPR2 are true; else false
      EXPR1 || EXPR2    True if either EXPR1 or EXPR2 is true; else false
    
    When the `==' and `!=' operators are used, the string to the right of
    the operator is used as a pattern and pattern matching is performed.
    When the `=~' operator is used, the string to the right of the operator
    is matched as a regular expression.
    
    The && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
    determine the expression's value.
    
    Exit Status:
    0 or 1 depending on value of EXPRESSION.
$ help if
if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
    Execute commands based on conditional.
    
    The `if COMMANDS' list is executed.  If its exit status is zero, then the
    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is
    executed in turn, and if its exit status is zero, the corresponding
    `then COMMANDS' list is executed and the if command completes.  Otherwise,
    the `else COMMANDS' list is executed, if present.  The exit status of the
    entire construct is the exit status of the last command executed, or zero
    if no condition tested true.
    
    Exit Status:
    Returns the status of the last command executed.

Как видите, в качестве аргумента к if можно использовать любую команду, например, if ! ping -c 4 ya.ru; then echo either yandex is dead or internet connection is broken; fi

AITap ★★★★★
()
Ответ на: комментарий от AITap

Спасибо за наводку, очень в тему.

demo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.